【发布时间】:2018-06-19 02:57:09
【问题描述】:
Spring Controller 中的方法是否可以根据某些条件返回 JSON 或视图?
有人可以分享例子吗?
问候, 法尔汉
【问题讨论】:
-
您应该尝试自己解决问题并在此处分享您的发现。对于初学者来说,请查看
ViewResolvers。 baeldung.com/spring-mvc-view-resolver-tutorial
标签: spring spring-mvc
Spring Controller 中的方法是否可以根据某些条件返回 JSON 或视图?
有人可以分享例子吗?
问候, 法尔汉
【问题讨论】:
ViewResolvers。 baeldung.com/spring-mvc-view-resolver-tutorial
标签: spring spring-mvc
这是一种解决方案:您可以在 Controller 中使用两种方法,一种使用 @ResponseBody 注释并返回 JSON 值,另一种经典方法返回 ModelAndView。
两种方法都可以使用具有不同参数(查询或标头参数)的相同 http 端点。在我看来,将请求路由到预期格式的更简洁的方法是使用具有以下值的 Content-Type 标头:text/html 和 application/json(或路径扩展 .html 或 .json 但我d更喜欢标题解决方案)。
为此,您可以使用@RequestMapping 注释的consumes 属性:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html
更好的设计是在@RestController 注释类中将返回JSON 的方法与真正的restfull 端点和您的经典MVC 方法与@Controller 注释类中的非restfull 端点(通常对SEO 不利)分开仅为 MVC 保留(并且两个控制器系列都可以在 @Service 注释类中使用相同的业务逻辑,这些类不公开 http 端点)。
如果您真的想使用单一方法并在某些条件下确定输出格式,我认为这对您的 http 客户端来说是一个非常糟糕的设计,但仍然可以使用 ViewResolvers 就像 Bart 建议的那样厘米。
【讨论】: