• 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

  • 相关阅读:
    ip_vs 原理解析 (四)hook 后的开始 NF_INET_LOCAL_OUT
    Go实现LogCollect:海量日志收集系统【下篇——开发LogTransfer】
    SpringBoot 小结
    领域驱动设计(DDD):从基础代码探讨高内聚低耦合的演进
    竞赛选题 深度学习+opencv+python实现车道线检测 - 自动驾驶
    重学Java的第一章
    Springboot属性注入
    都2022年了,Python Web框架你不会只知道Django和Flask吧?
    飞地的数量
    基于SSM的动漫商城管理系统
  • 原文地址:https://blog.csdn.net/m0_60215634/article/details/126341939