Spring3 MVC 输出JSON

来源:互联网 发布:淘宝链接转换淘口令 编辑:程序博客网 时间:2024/06/08 00:05

Spring4,推荐

代码
https://github.com/dzetJavaEE/spring3_mvc_tutorial


三种输出JSON 的方式,简介

如果想要获取多种格式的数据,
可查询 spring3 contentnegotiatingviewresolver json

1 配置 AnnotationMethodHandlerAdapter,

返回Response Entity< T > 或者使用方法注解 @ResponseBody
(限制有点大)

2 借助Servlet特性,HttpServletResponse,

获取getWriter(),输出转化好的Json数据(其他格式也可以,转化即可)

3 返回 new ModelAndView( 视图名称,模型数据名称,模型数据)

模型数据需要转化为JSON(其他格式也可以,转化即可)
new ModelAndView( “jsonmsg”,”message”,模型数据),
例如:jsonmsg.jsp
jsp里只有${message}


所需json jar包 maven(部分)(完整在下方)
        <!-- Jackson JSON Mapper -->        <dependency>            <groupId>org.codehaus.jackson</groupId>            <artifactId>jackson-mapper-asl</artifactId>            <version>1.7.1</version>        </dependency>        <!-- fastjson -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.39</version>        </dependency>

spring3-serlvet.xml 配置(部分)(完整在下方)

使用@ResponseBody注解,就需要配置 AnnotationMethodHandlerAdapter

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"          p:messageConverters-ref="messageConverters"    />    <utils:list id="messageConverters">        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>    </utils:list>

fruit controller

三种方式
见方法文档注释

package com.web;import com.alibaba.fastjson.JSON;import com.web.model.Fruit;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;@Controller@RequestMapping("/fruit")public class FruitController {    /**     * 0 方式一 1     * 1 配置 AnnotationMethodHandlerAdapter     * 2 返回 ResponseEntity<?>     * @return     */    @RequestMapping(value = "/banana1")    public ResponseEntity<Fruit> getBanana1() {        Fruit fruit = new Fruit("banana1", 1001);        return new ResponseEntity<Fruit>(fruit, HttpStatus.OK);    }    /**     * 0 方式一 2     * 1 配置 AnnotationMethodHandlerAdapter     * 2 使用注解 @ResponseBody     * @return     */    @ResponseBody    @RequestMapping(value = "/banana2")    public Fruit getBanana2() {        Fruit fruit = new Fruit("banana2", 1002);        return fruit;    }    /**     * 0 方式二     * 1 方法参数 HttpServletResponse     * 2 获取getWriter() 输出数据print(xxx)     * @param res     * @throws IOException     */    @RequestMapping(value = "/banana3")    public void getBanana3(HttpServletResponse res) throws IOException {        Fruit fruit = new Fruit("banana3", 1003);        PrintWriter out = res.getWriter();        out.print(JSON.toJSON(fruit)); // <=== json        out.flush();        out.close();    }    /**     * 0 方式三     * 1 ModelAndView( 视图名称, 数据模型名称, 数据模型数据)     * @return     */    @RequestMapping(value = "/banana4")    public ModelAndView getBanana4(){        Fruit fruit = new Fruit("banana3", 1003);        return new ModelAndView("jsonmessage", "message", JSON.toJSON(fruit));    }}

完整maven依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>test</groupId>    <artifactId>spring3_mvc_tutorial</artifactId>    <packaging>war</packaging>    <version>1.0-SNAPSHOT</version>    <name>spring3_mvc_tutorial Maven Webapp</name>    <url>http://maven.apache.org</url>    <dependencies>        <!--junit测试 依赖-->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>3.8.1</version>            <scope>test</scope>        </dependency>        <!--web依赖-->        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>servlet-api</artifactId>            <version>3.0-alpha-1</version>        </dependency>        <dependency>            <groupId>org.apache.taglibs</groupId>            <artifactId>taglibs-standard-impl</artifactId>            <version>1.2.5</version>        </dependency>        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>jstl</artifactId>            <version>1.2</version>        </dependency>        <!--spring 依赖-->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>3.1.2.RELEASE</version>        </dependency>        <!-- Jackson JSON Mapper -->        <dependency>            <groupId>org.codehaus.jackson</groupId>            <artifactId>jackson-mapper-asl</artifactId>            <version>1.7.1</version>        </dependency>        <!-- fastjson -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.39</version>        </dependency>    </dependencies>    <build>        <finalName>spring3_mvc_tutorial</finalName>    </build></project>

完整spring-servlet.xml 配置
<beans xmlns="http://www.springframework.org/schema/beans"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:p="http://www.springframework.org/schema/p"       xmlns:utils="http://www.springframework.org/schema/util"       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context-3.0.xsd        http://www.springframework.org/schema/util        http://www.springframework.org/schema/util/spring-util.xsd">    <context:component-scan base-package="com"/>    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"          p:messageConverters-ref="messageConverters"    />    <utils:list id="messageConverters">        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>    </utils:list>    <!--p:viewClass="org.springframework.web.servlet.view.JstlView"-->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"          p:prefix="/jsp/"          p:suffix=".jsp"    /></beans>

文章推荐:
http://www.cnblogs.com/zhujiabin/p/5122931.html


end

原创粉丝点击