[英]Spring RestController custom view resolver
我最近开始使用spring实现应用程序,尤其是对@RestController
注释进行了一些使用。 我之前为普通控制器定义了一个自定义视图解析器,但是我想知道如何为其余控制器做类似的事情。 我只是想在返回JSON之前捕获它,所以我可以漂亮地打印它。
我猜因为它并不是真正地路由到“视图”,所以视图解析器可能是错误的方法。 我应该使用什么? 可以使用HandlerInterceptor
吗? 我将如何仅@RestController
注释类?
您的控制器(最有可能)最终返回一个对象,该对象由适当的HttpMessageConverter
(可能是这个)序列化为JSON。
当消息转换器将您返回的对象的JSON表示直接写入响应输出流时,您将需要子类MappingJackson2HttpMessageConverter
并覆盖其writeInternal
方法,从而有机会在序列化过程中应用您的自定义逻辑。 然后,您需要注册此自定义转换器,而不是默认转换器(或至少在它之前 )。
如果您的后处理可以由杰克逊可以处理的自定义序列化代替,那么最好的选择是适当地设置一个ObjectMapper
并将其在构建时传递给杰克逊消息转换器。
我认为拦截器无法为您做很多事情,因为它仅为您提供一个ModelAndView
其中包含从控制器返回的对象,而不是其序列化版本。
或者,您当然可以使用请求过滤器(在整个Spring MVC生命周期之外),提供自定义HTTP响应包装器(带有一些ByteArrayOutputStream
来累积JSON输出),然后对其进行后处理,然后再将其写入实际响应中输出流。
您可以按照此处所述使用HandlerInterceptorAdapter
如您所见,可以像这样配置拦截映射
<!-- Configuring interceptors based on URI -->
<interceptors>
<interceptor>
<mapping path="/home" />
<beans:bean class="com.journaldev.spring.RequestProcessingTimeInterceptor"></beans:bean>
</interceptor>
</interceptors>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.