【发布时间】:2016-07-25 12:29:59
【问题描述】:
我已经构建了一些自定义编组器,并且正在尝试访问消息服务。我有以下代码。
resources.groovy
customObjectMarshallers(CustomObjectMarshallers){
marshallers = [
new PersonMarshaller(),
new DepartmentMarshaller(),
new ErrorsMarshaller()
]
}
CustomObjectMarshallers
class CustomObjectMarshallers {
List marshallers = []
def register(){
marshallers.each {
it.register()
}
}
}
ErrorsMarshaller
class ErrorsMarshaller {
@Autowired
def MessageSource messageSource
void register(){
JSON.registerObjectMarshaller(FieldError){ FieldError fieldError ->
def pMap = [:]
fieldError.properties.each { prop, val ->
println 'prop ' + prop
if( prop == 'rejected_value' || prop == 'arguments' || prop == 'class' || prop == 'codes' || prop == 'code' || prop == 'bindingFailure') {
return
} else if(prop == 'defaultMessage') {
pMap[prop] = messageSource.getMessage(val, fieldError, Locale.US)
} else {
pMap[prop] = MarshallerUtils.cleanPropertyValue(val)
}
}
return pMap
}
}
}
我收到以下异常
无法在空对象上调用方法 getMessage()。堆栈跟踪如下: java.lang.NullPointerException:无法在空对象上调用方法 getMessage() 在 org.hri.leaverequest.marshaller.ErrorsMarshaller$_register_closure1_closure2.doCall(ErrorsMarshaller.groovy:26) 在 org.hri.leaverequest.marshaller.ErrorsMarshaller$_register_closure1.doCall(ErrorsMarshaller.groovy:21) 在 grails.converters.JSON.value(JSON.java:202) 在 grails.converters.JSON.convertAnother(JSON.java:162) 在 grails.converters.JSON.value(JSON.java:202) 在 grails.converters.JSON.render(JSON.java:134) 在 org.hri.leaverequest.CalendarController.processRequest(CalendarController.groovy:154) 在 grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198) 在 grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63) 在 grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53) 在 grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49) 在 grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:744)
【问题讨论】:
-
什么版本的 Grails?您是否配置了对这些包的扫描?
-
@JoshuaMoore 2.4 版,我不知道配置扫描这些包意味着什么。
标签: grails