【SpringMVC】json

JSON

JSON,全称是 JavaScript Object Notation,即 JavaScript对象标记法。
JSON是一种轻量级、基于文本的、可读的格式。
JSON是参考JavaScript 对象的规则定义的,其语法与JavaScript定义对象的语法几乎完全相同。
JSON是前后端交互的一种格式信息。

一、结合SpringMVC使用jackson与前端交互

1.添加web框架支持,和创建lib目录防止资源导出失败

保证配置好了前端控制器,以及spring管理的配置文件。这些都是约定大于配置。

2.导包jackson

    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.3</version>
        </dependency>
    </dependencies>

3.使用jackson结合处理器映射器返回json

通常情况下,我们可以用@ResponseBody注解,只返回一个字符串结果到页面上。

@Controller
public class UserController {
    @GetMapping("/h1")
    @ResponseBody//结合Mapping映射器使用,不走视图解析器,不再返回视图,而是返回一个字符串。
    public String test(){
        User user = new User("kxy", 19, "男");
        return user.toString();
    }
}

在这里插入图片描述
而它只是个对象形式的字符串。而我们需要做的是,把他变成json字符串。

@Controller
public class UserController {
    @RequestMapping("/h1")
    @ResponseBody
    public String test() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        User user = new User("kxy", 19, "男");
        String json = mapper.writeValueAsString(user);
        return json;
    }
}

jackson包下的ObjectMapper的mapper对象,它的writeValueAsString方法可以把一个对象转成json字符串。这只是使用对象转json的常用方法之一。

此外我们还需要解决返回json到前端产生的乱码问题:

<!-- 解决返回json到前端的乱码问题-->
<mvc:annotation-driven>
        <mvc:message-converters>
            <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>

最后,就是一个完美的java对象返回json到前端的视图:
在这里插入图片描述
当然,你也可以把多个对象封装到一个集合(如ArrayList)那么:

    @RequestMapping("/h2")
    @ResponseBody
    public String test2() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        User user1 = new User("kxy", 19, "男");
        User user2 = new User("kxy1", 19, "男");
        User user3 = new User("kxy2", 19, "男");
        User user4 = new User("kxy3", 19, "男");
        ArrayList<User> list = new ArrayList<>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);
        String json = mapper.writeValueAsString(list);
        return json;
    }

在这里插入图片描述
时间戳转换成json:

    @GetMapping("/h3")
    @ResponseBody
    public String test3() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        mapper.setDateFormat(simpleDateFormat);
        Date date = new Date();
        String json = mapper.writeValueAsString(date);
        return json;
    }

如果每个方法里都需要这样重复的代码,我们可以写一个JsonUtil类实现代码的复用:

public class JsonUtil {
    public static String getJson(Object o){
       return getJson(o,"yyyy-mm-dd HH:mm:ss");
    }

    public static String getJson(Object o, String dateFormat){
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
        mapper.setDateFormat(simpleDateFormat);
        try {
            return mapper.writeValueAsString(o);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}
	@GetMapping("/h3")
    @ResponseBody
    public String test3(){
        return JsonUtil.getJson(new Date(),"yyyy-mm-dd hh:mm:ss");
    }

小插曲

关于

@Controller
public class UserController {
    @RequestMapping("/h1")
    @ResponseBody
    public String test() throws {
        return "str";
    }
}
@RestController
public class UserController {
    @RequestMapping("/h1")
    public String test() throws {
        return "str";
    }
}

以上两段代码效果一样。@RestController表示类下面的所有方法的返回值都是一个普通的字符串,不会受视图解析器所影响。

二、结合SpringMVC使用fastJson与前端交互

导包:

		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.7</version>
        </dependency>

用法:

    @RequestMapping("/h1")
    @ResponseBody
    public String test(){
        User user = new User("kxy", 19, "男");
        return JSON.toJSONString(user);
    }

除此之外:

JSON.parseObject() //json转对象
(JSONObject) JSON.toJSON() //java对象转json对象
JSON.toJavaObject() //json对象转java对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

❀༊烟花易冷ღ

觉得博客写的不错就打赏一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值