关于SpringMVC 中服务器端如何响应 AJAX 请求(即controller是如何返回json的)

时间:2022-12-02 08:16:59



简单的来说,注解@ResponseBody是直接返回字符串,而不加这个注解,则springmvc会通过modelandview找到对应的jsp页面,并返回页面内容。(若不理解请看【知识点08】)

至于下图这样,controller直接返回entity层,而页面依然显示为json字符串,是因为springmvc配置中添加了转换器converter

(其中消息转换器是为了解决返回时中文乱码,起作用的应该是下文示例中MappingJackson2HttpMessageConverter,本文没注入该bean也可使用,是因为mvc:annotation-driven自动注入了。)

<!--添加注解驱动 -->

        <mvc:annotation-driven>

           <!-- 消息转换器,解决中文返回乱码问题-->

           <mvc:message-convertersregister-defaults="true">

             <beanclass="org.springframework.http.converter.StringHttpMessageConverter">

               <propertyname="supportedMediaTypes"value="text/html;charset=UTF-8"/>

             </bean>

           </mvc:message-converters>

   </mvc:annotation-driven>

user自动转换为json字符串,然后返回为页面内容。

关于SpringMVC 中服务器端如何响应 AJAX 请求(即controller是如何返回json的)

关于SpringMVC 中服务器端如何响应 AJAX 请求(即controller是如何返回json的)


----------------------------------------------------------------------------------------------------


SpringMVC处理 AJAX请求很简单,只需要在方法的前面加上 @ResponseBody即可。一般返回 String(可以是JSON, XML,普通的 Text),也可以是 Object



1.返回 Json字符串



1.1. controller里添加下面的方法


   @RequestMapping(value="/ajax")


   @ResponseBody //处理 AJAX请求,返回响应的内容,而不是 View Name


   public String handleAjax() {


       return "{username: \"Josh\", password:\"Passw0rd\"}";


   }



1.2.访问http://localhost:8080/ajax

关于SpringMVC 中服务器端如何响应 AJAX 请求(即controller是如何返回json的)


输出的内容正是方法 handleAjax()里返回的内容。


2.自动把对象转换为 Json


不直接返回 Json字符串,而是返回一个对象,SpringMVC自动的把对象转换为 Json,需要 Jackson



2.1. pom.xml里添加依赖


  <dependency>


      <groupId>com.fasterxml.jackson.core</groupId>


      <artifactId>jackson-databind</artifactId>


      <version>2.5.3</version>


  </dependency>


 


2.2. spring-mvc.xml里配置 converter


   <mvc:annotation-driven>


       <mvc:message-converters register-defaults="true">


           <beanclass="org.springframework.http.converter.StringHttpMessageConverter">


               <constructor-argvalue="UTF-8" />


           </bean>


           <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">


               <propertyname="objectMapper">


                   <beanclass="com.fasterxml.jackson.databind.ObjectMapper">


                       <propertyname="dateFormat">


                           <beanclass="java.text.SimpleDateFormat">


                               <constructor-arg type="java.lang.String"value="yyyy-MM-dd HH:mm:ss"/>


                           </bean>


                       </property>


                   </bean>


               </property>


           </bean>


       </mvc:message-converters>


   </mvc:annotation-driven>


 


2.3. controller里添加下面的方法


   @RequestMapping(value="/json", method= RequestMethod.GET)


   @ResponseBody


   public Address getAddress() {


       Address address = new Address();


       address.setId(101);


       address.setStreet("五菱街");



       return address;


   }


 


2.4.定义 Address


package domain;



public class Address {


   private int id;


   private String street;


 


   public int getId() {


       return id;


   }


 


   public void setId(int id) {


       this.id = id;


   }


 


   public String getStreet() {


       return street;


   }


 


   public void setStreet(String street) {


       this.street = street;


   }


 


2.5.访问http://localhost:8080/json

关于SpringMVC 中服务器端如何响应 AJAX 请求(即controller是如何返回json的)