SpringMVC 中响应 AJAX 请求

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">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8" />
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="dateFormat">
                            <bean class="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