• SpringMVC的学习____6.JSON 和Ajax


    1.JSON:

    1.1基本概念:

    JSON(JavaScript Object Nation:JS对象标记)是一种数据交换格式,JS中的数据类型都可以采用JSON表示。

    JS中的数据类型:

    对象采用 属性名:属性值 形式的键值对;

    数据之间采用逗号隔开;

    数组采用方括号表示;

    对象采用花括号表示;JSON表示JS对象本质上就是将对象用文本的形式表示,本质就是字符串;

    代码实例1:(JSON将JS对象的转换表示

    JSON.stringify(user);   //将user对象转换成字符串的形式

    JSON.parse(JSON.stringify(user));    //将转换后的字符串再转换成对象的形式

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <!--json与javascript之间的对象转换问题-->
    
    <script>
        var user={
            name:"xbf",
            age:18,
            id:1
        };
        console.log(user);
    
        //使用json将其转换成字符串的形式
        var str=JSON.stringify(user);
        console.log(str);
    
        //使用JSON将字符串转换回来
        var u2=JSON.parse(str);
        console.log(u2);
    
    </script>
    
    </body>
    </html>

    运行结果:

    1.2Controller层进行JSON字符串的返回:

     Jackson:解析Json的工具,使用时需要下载相应的Jar包:

    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.8</version>
            </dependency>

    代码实例2:(使用Jackson实现Controller层返回字符串数据层类型)

     此处只列举下Controller层的代码:

    (使用到了两个新东西,@ResponseBody(将服务端响应的对象转换成json格式响应回去),ObjectMapper对象:对象映射器  直接将对象转换成字符串)

    @Controller
    public class UserController {
        @RequestMapping("/t1")
        @ResponseBody
        public String test1() throws JsonProcessingException {
            //创建一个Jackson的解析对象mapper
            ObjectMapper mapper = new ObjectMapper();
            //创建一个对象,并解析成字符串的形式 mapper.writeValueAsString
            String s = mapper.writeValueAsString(new User("张三", 18, 1));
            //返回字符串
            return s;
        }
        
    }

    出现乱码问题:

    解决方法:

    //produces:指定响应体返回类型和编码
        @RequestMapping(value = "/json",produces = "application/json;charset=utf-8")

    上述的解决方法比较繁琐,需要在每个@RequestMapping中添加处理语句,使用Spring的配置统一进行处理,就不用在每个项目中一个个解决了(在注解驱动中进行配置)。

     <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="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                            <property name="failOnEmptyBeans" value="false"/>
                        </bean>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>

    代码实例3:(使用Jackson返回集合)

     //打印集合测试
        @RequestMapping("/t2")
        @ResponseBody //将服务端响应的对象转换成json格式字符串响应回去
        public String test2() throws JsonProcessingException {
            //json解析对象
            ObjectMapper mapper = new ObjectMapper();
    
            User user1 = new User("张三1", 18, 1);
            User user2 = new User("张三2", 18, 2);
            User user3 = new User("张三3", 18, 3);
            User user4 = new User("张三4", 18, 4);
    
            ArrayList<User> list = new ArrayList<>();
            list.add(user1);
            list.add(user2);
            list.add(user3);
            list.add(user4);
            String s = mapper.writeValueAsString(list);
            return s;
        }

    此案例就是使用spring中配置来解决JSON的乱码问题。

     代码实例4:JSON之时间日期对象:

       //打印时间的测试1:
        @RequestMapping("/time1")
        @ResponseBody //将服务端响应的对象转换成json形式
        public String time1() throws JsonProcessingException {
            ObjectMapper mapper = new ObjectMapper();
            Date date = new Date();
            String s = mapper.writeValueAsString(date);
            return s;
        }
    
        //打印时间的测试2:
        @RequestMapping("/time2")
        @ResponseBody //将服务端响应的对象转换成json形式
        public String time2() throws JsonProcessingException {
            ObjectMapper mapper = new ObjectMapper();
            //1.如何让他不返回时间戳!所以我们要关闭它的时间戳功能
            mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
            //2.时间格式化问题!自定日期格式对象;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            //3.让mapper指定时间日期格式为simpleDateFormat;
            mapper.setDateFormat(sdf);
            //写一个日期对象
            Date date = new Date();
            return mapper.writeValueAsString(date);
        }

  • 相关阅读:
    Javascript的调试利器:Firebug使用详解
    ASP.NET URL Rewriter 技术
    asp读取xml
    怎样提高WebService性能大数据量网络传输处理
    .net实现URL重写
    VS2005中,创建新网站ASP.NET,没有解决方案
    asp.net架构之请求处理过程:HttpModule,HttpHandler
    在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的
    正则表达式基础知识
    asp.net用url重写URLReWriter实现任意二级域名
  • 原文地址:https://www.cnblogs.com/xbfchder/p/11343511.html
Copyright © 2020-2023  润新知