• Springboot中使用@JsonProperty和@JSONField


    2个注解都是为了解决json字符串的某些属性名和JavaBean中的属性名匹配不上的问题。

    例子,不使用注解的情况

    1. @Data
    2. public class Routine {
    3. private Integer TTS_voice;
    4. }
    1. @PostMapping("/test8")
    2. public Routine test8(@RequestBody Routine routine){
    3. return routine;
    4. }

     传递参数为null并且返回的结果字段名也不一致。(命名原因jackson会自动帮你转换)

    1.@JsonProperty

    该注解为jackson包下的,在starter-web启动器下已经存在。

    使用方法,在bean属性或方法上加上该注解

    1. @Data
    2. public class Routine {
    3. @JsonProperty("TTS_voice")
    4. private Integer TTS_voice;
    5. }

    测试(因为springboot默认的转换方式就是jackson所以不需要做配置)

     在使用自定义getset方法时发现会出现重复字段,查看编译过后的@lombok发现生成的方法与自定义的无区别但是不会出现重复字段。

    1. public class Routine {
    2. @JsonProperty("TTS_voice")
    3. private Integer TTS_voice;
    4. public Integer getTTS_voice() {
    5. return TTS_voice;
    6. }
    7. public void setTTS_voice(Integer TTS_voice) {
    8. this.TTS_voice = TTS_voice;
    9. }
    10. }

     出现重复字段解决办法,@JsonProperty改为加在get方法上

    1. public class Routine {
    2. private Integer TTS_voice;
    3. @JsonProperty("TTS_voice")
    4. public Integer getTTS_voice() {
    5. return TTS_voice;
    6. }
    7. public void setTTS_voice(Integer TTS_voice) {
    8. this.TTS_voice = TTS_voice;
    9. }
    10. }

    2. @JSONField

    该注解为fastjson包下的,导包

    1. com.alibaba
    2. fastjson
    3. 1.2.24

    启动类配置fastjson转换(如果仅仅是内部使用转换json字符串则不需要配置)

    1. @Bean
    2. public HttpMessageConverters fastJsonHttpMessageConverters(){
    3. //1、先定义一个convert转换消息的对象
    4. FastJsonHttpMessageConverter fastConverter=new FastJsonHttpMessageConverter();
    5. //2、添加fastjson的配置信息,比如是否要格式化返回的json数据;
    6. FastJsonConfig fastJsonConfig=new FastJsonConfig();
    7. fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
    8. //附加:处理中文乱码
    9. List fastMedisTypes = new ArrayList();
    10. fastMedisTypes.add(MediaType.APPLICATION_JSON_UTF8);
    11. fastConverter.setSupportedMediaTypes(fastMedisTypes);
    12. //3、在convert中添加配置信息
    13. fastConverter.setFastJsonConfig(fastJsonConfig);
    14. HttpMessageConverter converter=fastConverter;
    15. return new HttpMessageConverters(converter);
    16. }

    使用方法与@JsonProperty一致

    1. @Data
    2. public class Routine {
    3. @JSONField(name = "TTS_voice")
    4. private Integer TTS_voice;
    5. }

     需要注意的是在使用这2个注解进行转换时必须使用相应的方法否则不起作用(fastjson、jackson)

    fastjson忽略属性注解为@JSONField(serialize = false)

    jackson忽略属性注解为@JsonIgnore

  • 相关阅读:
    SSL是什么?关于SSL和TLS的常见问题
    Android --- 异步操作
    docker全家桶(基本命令、dockerhub、docker-compose)
    9月9日扒面经
    flink cdc笔记(二):flink cdc的两种开发方式
    理解浅拷贝和深拷贝以及实现方法
    《数字图像处理-OpenCV/Python》连载(44)图像的投影变换
    4.企业快速开发平台Spring Cloud+Spring Boot+Mybatis之Highcharts 配置选项详细说明
    httpserver 下载服务器demo 以及libevent版本的 httpserver
    一道React面试题把我整懵了
  • 原文地址:https://blog.csdn.net/m0_60215634/article/details/126341939