Spring MVC的控制器,JSON和JSP(Spring MVC Controller with

2019-09-24 07:05发布

可以在一个控制器中的方法相同的方法被用于JSP和其他的MIME类型(如XML和JSON)?

我知道下面的方法来解决Spring MVC的意见。

  1. 返回一个String与视图名称和属性添加到ModelModelMap
  2. 返回ModelAndView与视图名称和型号
  3. 返回一个Object具有@ResponseBody注解

我用1或2,当我处理的JSP和3时,我想返回JSON或XML。

我知道我可以使用两种方法并用@RequestMapping(headers="accept=application/xml")@produces注解来定义他们处理其MIME类型,但有可能做到这一点的只有一个方法?

控制器逻辑非常简单,似乎是不必要的重复有映射两种不同的方法,返回完全相同的模型,或者是它这样做只是简单的方法是什么?

Answer 1:

是的,这是直线前进Spring MVC中3.X ...

基本上你写你的控制器方法只是正常的JSP页面访问量,然后在配置ContentNegotiatingViewResolver在调度servlet配置豆,它看起来在请求的MIME类型(或文件扩展名),并返回相应的输出类型。

按照这里的说明: 春3 MVC ContentNegotiatingViewResolver例



Answer 2:

我最近有同样的要求,下面是我的代码。 validateTicket返回JSP名称和sendForgotPassword邮件返回JSON。 我的春天版本是4.0.0.RELEASE。 当然,如果我需要返回复杂JSON话,我肯定会注册杰克逊转换器- http://docs.spring.io/spring/docs/4.0.x/javadoc-api/org/springframework/http/converter/json /MappingJackson2HttpMessageConverter.html

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">


<context:component-scan base-package="foo.bar" />
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>
</beans>

@Controller
@RequestMapping("/forgot-password")
public class ForgotPasswordController {

@RequestMapping(value="/reset-password", method = RequestMethod.GET)
public String validateTicket(@RequestParam String ticket, @RequestParam String emailAddress) {
    return "resetPassword";
}

@RequestMapping(value="/send-mail", method = RequestMethod.POST, produces="application/json")
public @ResponseBody String sendForgotPasswordMail(@RequestParam String emailAddress) throws LoginException {
    return "{\"success\":\"true\"}";
}
}


文章来源: Spring MVC Controller with JSON and JSP