所以,让我们有这个简单的控制器:
@Controller
public class MyController {
private static final Logger logger = LoggerFactory.getLogger(MyController.class);
@RequestMapping(value="/entities", method = RequestMethod.GET)
public @ResponseBody ResultPojo getSomething() {
logger.info("getSometing");
return new ResultPojo();
}
}
...以及以下上下文片段:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
这基本上意味着我希望能够返回结果 bean 的 json 表示,否则返回 406。
如果我发送 GET 请求accept=application/json
,一切正常,在 http 响应中返回一个 json 表示,状态为 200 Ok。
如果我发送 GET 请求accept=application/xml
,则返回 406。
我在第二种情况下的问题是,即使最终返回 406,该getSomething()
方法仍然被调用(我可以在日志中看到)。虽然这对 GET 方法来说没什么大不了的,但它可能会导致 POST 方法的混乱(资源被更改,但返回 406)。
有没有一种简单的方法来告诉 SpringMVC在调用控制器方法之前accept
检查标头并返回 406 ?还是我必须开发一个自定义的 http SpringMVC 拦截器?