Skip to content

三、数据响应

一、SpringMVC的数据响应方式

  1. 页面跳转

    • 直接返回字符串

    • 通过ModelAndView对象返回

  2. 回写数据

    • 直接返回字符串
    • 返回对象或集合

1、页面跳转


(1)返回字符串形式

直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转

java
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/quick1")
    public String stringTest1(){
        return "quick1";
    }
}
java
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/quick2")
	public String stringTest2(Model model){
        model.addAttribute("username","胡二狗quick2");
    	return "quick2";
	}
}
java
@Controller
@RequestMapping("/user")
public class UserController {

     @RequestMapping("/quick3")
 	 public String stringTest2(HttpServletRequest request) {
     	request.setAttribute("username", "胡二狗quick3");
      	return "quick3";
	 }
}

spring-mvc.xml

xml
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
</bean>

最终转发资源地址:/WEB-INF/views/index.jsp

信息

转发:forward:/WEB-INE/views/index.jsp

重定向:redirect:/index.jsp

(2)返回ModelAndView对象

java
@Controller
@RequestMapping("/user")
public class UserController {
    
	@RequestMapping("/quick3")
	public ModelAndView modelAndViewTest1(){
	    ModelAndView modelAndView = new ModelAndView();
	    modelAndView.addObject("username","胡二狗quick3");
	    modelAndView.setViewName("quick2");
	    return modelAndView;
    }
}
java
@Controller
@RequestMapping("/user")
public class UserController {
    
	@RequestMapping("/quick3")
	public ModelAndView modelAndViewTest2(ModelAndView modelAndView){
	    modelAndView.addObject("username","胡二狗quick4");
	    modelAndView.setViewName("quick4");
	    return modelAndView;
    }
}

spring-mvc.xml

xml
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
</bean>

2、回写数据


(1)直接返回字符串

  • 利用response回写数据

    java
    @RequestMapping("/huixie1")
    public void HuiXieDataTest1(HttpServletResponse response) throws IOException {
        //解决乱码
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print("利用response回写数据");
    }
  • 利用@Response注解回写数据

    java
    @RequestMapping(value = "/huixie2",produces = "text/html;charset=utf-8")  //解决中文乱码
    @ResponseBody
    public String HuiXieDataTest2()  {
        return "利用@ResponseBody回写数据";
    }

(2)直接返回对象或集合

  • 手动返回字符串json数据

    java
    @RequestMapping(value = "/huixie3",produces = "text/html;charset=utf-8")
    @ResponseBody
    public String HuiXieDataTest3(){
        return "{\"username\":\"胡二狗\",\"age\":\"13\"}";
    }
  • 导入json工具自动转化json数据

    工具类坐标

    xml
     <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-core</artifactId>
         <version>2.15.4</version>
     </dependency>
    
     <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-databind</artifactId>
         <version>2.15.4</version>
     </dependency>
    
     <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-annotations</artifactId>
         <version>2.15.4</version>
     </dependency>
    xml
     <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-core</artifactId>
         <version>2.15.4</version>
     </dependency>
    xml
    <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-databind</artifactId>
         <version>2.15.4</version>
    </dependency>
    xml
    <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-annotations</artifactId>
         <version>2.15.4</version>
    </dependency>

    测试

    java
    @RequestMapping(value = "/huixie4",produces = "text/html;charset=utf-8")
    @ResponseBody
    public String HuiXieDataTest4() throws JsonProcessingException {
        User user=new User(1,"胡二狗",21);
        
        ObjectMapper objectMapper=new ObjectMapper();
        String json = objectMapper.writeValueAsString(user);
    
        return json;
    }
  • SpringMVC使用适配器返回json数据

    spring-mvc.xml文件配置适配器

    xml
    <!-- 配置处理器映射器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
            </list>
        </property>
    </bean>

    测试

    java
    @RequestMapping(value = "/huixie5")
    @ResponseBody
    public User HuiXieDataTest5()  {
        User user=new User(1,"胡二狗",21);
        return user;
    }

    警告

    使用适配器后,原先加上@ResponseBody注解返回出的字符串会经过jackson的转化,但肯定转化会失败,所以会报错

    使用MVC命名空间简写

    xml
    <?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.xsd
           http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
    ">
        <context:component-scan base-package="com.hdq.controller"/>
    
        <mvc:annotation-driven/>
    
    </beans>