首先,我是Spring的新手,这是我第一次尝试使用Spring编写基于REST的应用程序。
我计划在请求参数和响应中使用Json。这就引出了两个问题。
produces="application/json"设置为所有mvc控制器响应的默认值。application/json以外的其他格式的结果,我想返回一条错误消息。我想这是我一个拦截器的责任,但我知道如何设置检查.发布于 2012-07-29 15:22:40
虽然没有办法在全局上设置produces,而且,正如Tomasz所建议的那样,将内容协商留给spring通常更容易,但作为拦截器实现该功能也相当容易。
基本上,对于没有以Accept作为值的application/json头的任何请求,都需要返回415状态代码。
因此,首先实现拦截器:
public class WrongAcceptHeaderInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
if (!"application/json".equals(request.getHeader("Accept"))) {
//you can change or omit the message
response.sendError(SC_UNSUPPORTED_MEDIA_TYPE, "Your error message");
// return false to skip further processing
return false;
}
}
}然后在你的上下文中注册:
<mvc:interceptors>
<bean class="foo.bar.baz.WrongAcceptHeaderInterceptor" />
</mvc:interceptors>发布于 2012-07-29 11:28:33
其实更简单。您只需从控制器返回Java对象,Spring就会根据Accept报头确定使用哪种格式:
@ResponseBody
public MyPojo noView(@RequestBody request) {
return new MyPojo();
}对请求也是如此- Spring将尽最大努力将请求体转换为request对象。一旦配置好了JSON(例如,您需要CLASSPATH上的jackson*.jar来处理JSON),它就可以工作了。
另外,由于您免费获得XML,因此没有必要将端点限制为JSON。如果用户请求其他格式,Spring将为您发送适当的错误消息(不良请求?)
另请参阅
https://stackoverflow.com/questions/11708284
复制相似问题