Springboot官网学习(7、Web应用程序【二Spring Web MVC 之HttpMessageConverters消息转换器】)

Spring MVC使用HttpMessageConverter接口来转换HTTP请求和响应。开箱即用中包含明智的默认设置。例如,可以将对象自动转换为JSON(通过使用Jackson库)或XML(通过使用Jackson XML扩展(如果可用)或通过使用JAXB(如果Jackson XML扩展不可用))。默认情况下,字符串编码为UTF-8。

消息转换器,用在什么地方?springmvc中是如何使用的?,他有默认配置,我们如何扩展?
个人觉得这三个问题,都有答案了的话,基本在项目开发中问题不大了,当然如果想更深入的话,就得去了解springmvc的源码了。

JSON,也叫JSON字符串,,目前大多数的数据传输载体,现在http数据传输大多都是采用JNSN格式。所以我们后台写的接口返回给前端的一般都是JSON字符串。
看下面的接口:


    @GetMapping(value="/{id}", method= RequestMethod.GET)
    public String getUserById(@PathVariable("id") int id) {
        User user = userService.getById(id);
        return JSONObject.toJSONString(user);
    }
    
    @GetMapping(value="/list", method= RequestMethod.GET)
    public String listUserBy() {
        List<User> user = userService.listUserBy();
        return JSONObject.toJSONString(user);
    }

这两个接口是返回给前端JSON字符串的,每一个接口方法的返回值都得定义成String,每次返回之前都得通过一些方法来将其对象转换成JSON字符串,对于程序来说,这是很麻烦的一件事情,降低了程序的可读性,增加了代码的冗余量。
所以消息转换器就诞生了,如果配置了消息转换器,那么上面的代码我们可以改成

  	@GetMapping(value="/{id}", method= RequestMethod.GET)
    public User getUserById(@PathVariable("id") int id) {
        return userService.getById(id);
    }
    
    @GetMapping(value="/list", method= RequestMethod.GET)
    public List<User> listUserBy() {
        return userService.listUserBy();
    }

下面这种写法是不是简单名了很多,方法返回值一看就知道,而且不用每个方法就去自己手动转一遍,

如何扩展了,如果他的默认配置项不适合我们这么办?
官方给出的例子:(在配置类中,通过@Bean注解返回自己设置属性的HttpMessageConverters对象给他即可)

import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.*;
import org.springframework.http.converter.*;

@Configuration(proxyBeanMethods = false)
public class MyConfiguration {

    @Bean
    public HttpMessageConverters customConverters() {
        HttpMessageConverter<?> additional = ...
        HttpMessageConverter<?> another = ...
        return new HttpMessageConverters(additional, another);
    }

}

操作一把,看下他有那些属性可以给我们设置:

	@Bean
    public HttpMessageConverters customConverters() {
         // 比如我们不用jackson,使用fastjson,那么我们就配置
        FastJsonHttpMessageConverter fjc = new FastJsonHttpMessageConverter();
        FastJsonConfig fj = new FastJsonConfig();
        //  WriteNullListAsEmpty  :List字段如果为null,输出为[],而非null
        // WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null
        // DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
        // WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
        // WriteMapNullValue:是否输出值为null的字段,默认为false。
        // 这里根据实际需求
        fj.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.WriteMapNullValue);
        fjc.setFastJsonConfig(fj);
        // 其他配置,比如String消息转换器等,如果想配置,可以自己对其修改
        return new HttpMessageConverters(fjc);
    }

在Springboot中,这个消息转换器是默认开启的,其他想ssm项目中,可能就需要自己配置了。
消息转换器,用在什么地方?springmvc中是如何使用的?,他有默认配置,我们如何扩展?现在这三个问题得到答案了吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值