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);
    }

原文地址:https://www.cnblogs.com/xbfchder/p/11343511.html