您的位置:首页 > 编程语言 > Java开发

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

2016-08-07 16:53 801 查看


简单的来说,注解@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请求很简单,只需要在方法的前面加上
@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



输出的内容正是方法 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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: