我有一个简单的Spring MVC控制器,它返回一个Model和View。这非常有效。 但现在我们正在转向纯REST架构,其中服务器仅通过JSON进行通信。
我试图尽可能多地重新使用现有的控制器,而不是改造一切,而这就是我能做的事情
我可以通过添加 ContentNegotiatingViewResolver 将 GET 请求重用到相同的控制器。所以现在同一个控制器可以返回一个jsp和一个基于接受头转换为json 的模型。
现在另一部分是 POST 请求我需要一些帮助。
要绑定一个json请求,我必须在现有控制器上使用@RequestBody,但我想以与我对GET请求相同的方式有条件地执行它。 因此,如果accept标头是json,它应该使用该消息转换器来绑定模型,否则使用通常的html表单绑定。
完成此操作后,如何为我的场景处理 BindingResult 对象?
总结一下我的问题:
答案 0 :(得分:1)
查看consumes
属性的produces
和@RequestMapping
属性。您可以使用不同consume
s的相同方法的两个版本,其中一个可以采用@RequestBody
而另一个则不采用。{/ p>
对于你问题的第二部分,抱歉无法帮助你。
答案 1 :(得分:0)
要处理POST请求,您需要拥有自定义AbstractHttpMessageConverter
和ModelAttributeMethodProcessor
。
如果控制器使用请求参数(@RequestBody
),您需要MessageConverter来处理使用请求体(@RequestParam
)和ModelAttributeMethodProcessor来处理验证的控制器。
显然,您要检查标题或其他方式是否使用默认绑定。
我回答了different question about validating immutable objects,但适用相同的方法。