• @JsonProperty和@JsonAlias的区别


    @JsonProperty
    这个注解提供了序列化和反序列化过程中该java属性所对应的名称
    @JsonAlias
    这个注解只只在反序列化时起作用,指定该java属性可以接受的更多名称

       public static void main (String[] args ) throws IOException {
            String a ="{"NaMe":"hello"}";
            ObjectMapper objectMapper = new ObjectMapper();
            Label label = objectMapper.readValue(a, Label.class);
            String labelString = objectMapper.writeValueAsString(label);
            System.out.println(labelString);
        }
    
        public static class Label{
            //反序列化时两个都可用,都没有会报错
            //@JsonAlias("NaMe")
            @JsonProperty("NaMe")
            public String name;
            public Label(){
            }
        }

    使用@JsonProperty时,序列化结果为:{“NaMe”:“hello”}
    使用@JsonAlias时,序列化结果为:{“name”:“hello”}

    参考:https://www.concretepage.com/jackson-api/jackson-jsonproperty-and-jsonalias-example.



    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.annotation.JSONField;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import lombok.Data;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.util.Objects;
    
    import static org.assertj.core.api.Assertions.assertThat;
    
    /**
     * Java序列化就是指把Java对象转换为字节序列的过程
     * Java反序列化就是指把字节序列恢复为Java对象的过程
     *
     * @author: cheng.tang
     * @date: 2020/7/1
     * @see
     * @since
     */
    @Data
    public class CustomFiledNameTest {
    
        private CustomField customField;
    
        @Before
        public void setUp() {
            customField = new CustomField();
            customField.setFastJsonCustomField("fastJsonCustomField");
            customField.setJacksonCustomField("jacksonCustomField");
            customField.setTwoTypeCustomField("twoTypeCustomField");
        }
    
        @Test
        public void ObjectMapperSceneTest() throws IOException {
            ObjectMapper objectMapper = new ObjectMapper();
            String actual = objectMapper.writeValueAsString(customField);
            /**
             * expected:加了@JsonProperty的序列化结果中的字段名都是自定义的那个
             */
            String expected = "{"fastJsonCustomField":"fastJsonCustomField","jacksonFormatOnly":"jacksonCustomField","jacksonFormatWithTwo":"twoTypeCustomField"}";
            /**
             * 检查序列化时 JsonProperty时是否有用
             */
            assertThat(actual).isEqualTo(expected);
    
            CustomField customField = objectMapper.readValue(actual, CustomField.class);
            /**
             * 反序列化场景
             */
            assertThat(Objects.equals(getCustomField(), customField)).isTrue();
    
            /**
             * 序列化场景
             */
            assertThat(Objects.equals(actual, objectMapper.writeValueAsString(customField))).isTrue();
        }
    
    
        /**
         * 发现fastjson和jackson序列化java对象时,字段的顺序不同
         */
        @Test
        public void fastJsonSceneTest() {
            String actual = JSON.toJSONString(customField);
            System.out.println(actual);
            /**
             * expected:加了@JSONField的序列化结果中的字段名都是自定义的那个
             */
            String expected = "{"fastJsonFormatOnly":"fastJsonCustomField","fastJsonFormatWithTwo":"twoTypeCustomField","jacksonCustomField":"jacksonCustomField"}";
            /**
             * 检查序列化时 @JSONField时是否有用
             */
            assertThat(actual).isEqualTo(expected);
    
            CustomField customField = JSON.parseObject(actual, CustomField.class);
            /**
             * 反序列化场景
             */
            assertThat(Objects.equals(getCustomField(), customField)).isTrue();
    
            /**
             * 序列化场景
             */
            assertThat(Objects.equals(actual, JSON.toJSONString(customField))).isTrue();
        }
    
    
    }
    
    @Data
    class CustomField {
    
        @JsonProperty("jacksonFormatOnly")
        private String jacksonCustomField;
    
        @JSONField(name = "fastJsonFormatOnly")
        private String fastJsonCustomField;
    
        @JsonProperty("jacksonFormatWithTwo")
        @JSONField(name = "fastJsonFormatWithTwo")
        private String twoTypeCustomField;
    
    }

     https://github.com/helloworldtang/spring-boot-cookbook/blob/master/learning-demo/src/test/java/com/tangcheng/learning/json/CustomFiledNameTest.java

  • 相关阅读:
    Office Access 2007 的连接方法变了
    程序员的灯下黑:坚持和良好心态近乎道
    Unity浅析
    WPF设置样式的几种方式
    关于常用 软件授权 Licence说明
    WCF消息队列
    委托利用GetInvocationList处理链式委托
    WCF chatroom源码解析
    写一个Jquery字体插件
    浅谈AsyncState与AsyncDelegate使用的异同
  • 原文地址:https://www.cnblogs.com/softidea/p/10445160.html
Copyright © 2020-2023  润新知