Java 弹簧拦截
首先,我是Spring的新手,这是我第一次尝试使用Spring编写基于REST的应用程序 我计划在请求参数和响应中使用Json。这就引出了两个问题Java 弹簧拦截,java,spring,rest,spring-mvc,Java,Spring,Rest,Spring Mvc,首先,我是Spring的新手,这是我第一次尝试使用Spring编写基于REST的应用程序 我计划在请求参数和响应中使用Json。这就引出了两个问题 是否有一种方法可以全局设置products=“application/json”作为所有mvc控制器响应的默认值 如果任何人发送请求并希望得到非application/json格式的结果,我将返回一条错误消息。我想这是拦截者的责任,但我知道如何设置检查 实际上更简单。您只需从控制器返回Java对象,Spring将根据Accept标题确定使用哪种格式:
products=“application/json”
作为所有mvc控制器响应的默认值application/json
格式的结果,我将返回一条错误消息。我想这是拦截者的责任,但我知道如何设置检查实际上更简单。您只需从控制器返回Java对象,Spring将根据
Accept
标题确定使用哪种格式:
@ResponseBody
public MyPojo noView(@RequestBody request) {
return new MyPojo();
}
请求也是如此——Spring MVC将尽最大努力将请求主体转换为request
对象。一旦配置好它(例如,您需要在类路径上jackson*.jar
来处理JSON),它就可以工作了
此外,由于您免费获得XML,因此将端点限制为JSON也没有意义。若用户请求其他格式,Spring将为您发送相应的错误消息(错误请求?)
另见
产品
,而且正如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>