Grails3拦截器和呈现自定义JSON视图
我正在尝试编写一个Grails3拦截器,它应该检查HTTP头中是否存在某些变量。如果它们不存在,我想呈现一个特定的json视图,但在before()方法中,呈现方法似乎不可用 有没有更好的方法来达到预期的效果 我在尝试呈现JSON视图时遇到以下错误Grails3拦截器和呈现自定义JSON视图,grails,grails-3.1,Grails,Grails 3.1,我正在尝试编写一个Grails3拦截器,它应该检查HTTP头中是否存在某些变量。如果它们不存在,我想呈现一个特定的json视图,但在before()方法中,呈现方法似乎不可用 有没有更好的方法来达到预期的效果 我在尝试呈现JSON视图时遇到以下错误 No qualifying bean of type [org.springframework.web.servlet.ViewResolver] is defined. No qualifying bean of type [org.springf
No qualifying bean of type [org.springframework.web.servlet.ViewResolver] is defined.
No qualifying bean of type [org.springframework.web.servlet.ViewResolver] is defined: expected single matching bean but found 4: groovyMarkupViewResolver,jsonViewResolver,beanNameViewResolver,mvcViewResolver. Stacktrace follows:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.web.servlet.ViewResolver] is defined: expected single matching bean but found 4: groovyMarkupViewResolver,jsonViewResolver,beanNameViewResolver,mvcViewResolver
at grails.artefact.Interceptor$Trait$Helper.render(Interceptor.groovy:254) ~[grails-plugin-interceptors-3.1.1.jar:3.1.1]
at device.registration.RegistrationInterceptor.before(RegistrationInterceptor.groovy:13) ~[main/:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_66]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_66]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_66]
截取码
JSON视图[/genericErrorResponse]
Stacktrace显示您正试图在
RegistrationInterceptor.groovy:13
获取类型为org.springframework.web.servlet.viewsolver
的bean。Grails默认有4种不同的ViewResolver实现,您必须明确要使用哪种实现。Grails 3中似乎有一个bug。请参见inteceptors可以使用渲染方法。您得到的错误是什么。您的视图可能有问题。@Sandeepoonia我已添加了收到的错误消息。感谢您指出,但是我如何告诉渲染方法使用特定的视图解析器?例如,在控制器中执行此操作时,同样的代码也可以正常工作。如果您没有手动获取bean,并且grails无法解析bean,那么可能是您的拦截器/视图中的某些代码导致了此问题。因此,如果可能的话,为拦截器和视图添加完整的代码
No qualifying bean of type [org.springframework.web.servlet.ViewResolver] is defined.
No qualifying bean of type [org.springframework.web.servlet.ViewResolver] is defined: expected single matching bean but found 4: groovyMarkupViewResolver,jsonViewResolver,beanNameViewResolver,mvcViewResolver. Stacktrace follows:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.web.servlet.ViewResolver] is defined: expected single matching bean but found 4: groovyMarkupViewResolver,jsonViewResolver,beanNameViewResolver,mvcViewResolver
at grails.artefact.Interceptor$Trait$Helper.render(Interceptor.groovy:254) ~[grails-plugin-interceptors-3.1.1.jar:3.1.1]
at device.registration.RegistrationInterceptor.before(RegistrationInterceptor.groovy:13) ~[main/:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_66]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_66]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_66]
class RegistrationInterceptor {
boolean before() {
String header = request.getHeader("Authorization")
if(!header) {
render view: "/genericErrorResponse", model: [e: new BadRequestException()]
}
false
}
boolean after() { true }
void afterView() {
// no-op
}
}
model {
BaseException e
}
response.status e.status
json {
message e.message
error e.error
status e.status
timestamp e.timestamp
}