• springmvc转换JSON数据


    1、引入jackson包

    要想在springmvc框架下支持json的转换,需要引入jackson的包,在pom.xml中添加如下代码:

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

    没有用maven的可以去官网下载jar包

    修改springMVC-servlet.xml文件,修改mvc:annotation-driven标签对应的内容,其实引用了jackson的包,默认就加了对json的转换了,我试了一下,不添加也可以用。

        <mvc:annotation-driven>
            <mvc:message-converters>
                <ref bean="stringHttpMessageConverter"/>
                <ref bean="mappingJackson2HttpMessageConverter"/>
            </mvc:message-converters>
        </mvc:annotation-driven>
    
        <bean id="stringHttpMessageConverter"
              class="org.springframework.http.converter.StringHttpMessageConverter"/>
    
        <bean id="mappingJackson2HttpMessageConverter"
              class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>text/html;charset=UTF-8</value>
                </list>
            </property>
        </bean>

    2、pojo类的转换

    添加一个pojo类 User.java

    public class User {
        
        private String username;
        private String fav;
        
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getFav() {
            return fav;
        }
        public void setFav(String fav) {
            this.fav = fav;
        }
    
    }

    Controller类中将User对象转换成json字符串输出:

        @RequestMapping("/test1")
        @ResponseBody
        public  User test1() {
            User user = new User();
            user.setUsername("张三");
            user.setFav("乒乓球");
            return user;
        }

    也可以这么写:

        @RequestMapping("/test1")
        public @ResponseBody User test1(HttpServletRequest request) {
            User user = new User();
            user.setUsername("张三");
            user.setFav("乒乓球");
            return user;
        }

    输出的结果是:

    {"username":"张三","fav":"乒乓球"}

    3、Map的转换

    如果没有pojo类,只是一些键值对的输出,可以使用Map

        @RequestMapping("/test2")
        @ResponseBody
        public Map<String,String> test2() {
            Map<String,String> map = new HashMap<String,String>();
            map.put("username", "张三");
            map.put("fav", "乒乓球");
            return map;
        }

    输出的结果跟上面的一样:

    {"username":"张三","fav":"乒乓球"}

    4、接收json串做为参数

        @RequestMapping(value="/test3",consumes="application/json",method=RequestMethod.POST)
        public String test3(@RequestBody User user,HttpServletRequest request) {
            request.setAttribute("username", user.getUsername());
            request.setAttribute("fav", user.getFav());
            return "/test3";
        }

    这里是使用@RequestBody User user作为接收参数,如果要接收json,接收方式只能是post方式,不然会报错

    这里我是返回到了一个jsp页面,这里就不把jsp页面的内容写出来了

    这里列一下上一个请求页面的html:

    <script type="text/javascript" src="js/jquery-2.1.1.js"></script>
    <script type="text/javascript">
    $.ajax({
          url: "test3",
          cache: false,
          contentType:"application/json",
          data:JSON.stringify({username:'张三',fav:'乒乓球'}),
          dataType:"json",
          type: "POST",
          success: function(html){
            alert(html);
          }
        });
    </script>

    5、另外一种选择Gson

    Gson的使用更加简单,也是目前流行的json处理包,可以把jackson替掉,引入gson

    pom.xml

            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.8.5</version>
            </dependency>

    springMVC-servlet.xml文件

        <mvc:annotation-driven>
            <mvc:message-converters>
                <ref bean="stringHttpMessageConverter"/>
                <ref bean="mappingGsonHttpMessageConverter" />
            </mvc:message-converters>
        </mvc:annotation-driven>
    
        <bean id="stringHttpMessageConverter"
              class="org.springframework.http.converter.StringHttpMessageConverter"/>
        
            <bean id="mappingGsonHttpMessageConverter"
              class="org.springframework.http.converter.json.GsonHttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>text/html;charset=UTF-8</value>
                </list>
            </property>
        </bean>
  • 相关阅读:
    工厂模式
    装饰器模式
    策略模式
    代理模式
    建造者模式
    单例模式
    观察者模式
    JVM运行时数据区
    Export to excel
    C#网络编程(同步传输字符串) Part.2 [转自JimmyZhang博客]
  • 原文地址:https://www.cnblogs.com/modou/p/9796640.html
Copyright © 2020-2023  润新知