@JsonProperty 起别名

文章展示了如何使用Fastjson和Jackson库进行对象到JSON字符串的序列化以及反序列化。Fastjson在反序列化时能处理属性或其驼峰命名,而Jackson依赖于注解指定的属性名,不支持原始属性反序列化,但可以通过@JsonProperty设置别名。
摘要由CSDN通过智能技术生成
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.54</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>

 实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDTO {

    /**
     * 用户id
     */
    @JsonProperty(value = "user_id")
    private String userId;

    /**
     * 用户名称
     */
    @JsonProperty(value = "user_name")
    private String userName;

}

序列化

    @Test
    public void test1() throws JsonProcessingException {

        UserDTO userDTO = new UserDTO();
        userDTO.setUserId("0001");
        userDTO.setUserName("李白");

        // jackson提供的打印成json字符串
        System.out.println(new ObjectMapper().writeValueAsString(userDTO));
        System.out.println("===============================================");
        // fastjson提供的打印成json字符串
        System.out.println(JSON.toJSONString(userDTO));
    }

    /*
   	运行结果:
        {"user_id":"0001","user_name":"李白"}
        ====================================
        {"userId":"0001","userName":"李白"}
    */

反序列化

    @Test
    public void test2() throws IOException {

        // fastjson的反序列化 对于仅仅支持类属性或其驼峰命名属性
        String paramStr = "{\"userId\":\"0001\",\"userName\":\"李白\"}";
        String paramStr2 = "{\"user_id\":\"0001\",\"user_name\":\"李白\"}";
        System.out.println(JSON.parseObject(paramStr, UserDTO.class));
        System.out.println(JSON.parseObject(paramStr2, UserDTO.class));
        System.out.println("===============================================");

        // jackson 不支持此实体类原有属性的反序列化,因其只通过读取注解上值进行反序列化
           //jackson可以通过 @JsonProperty 起别名 当别名传进来时可以通过
            //转为实体类里的名字
        // 成功
        String paramStr3 = "{\"user_id\":\"0001\",\"user_name\":\"李白\"}";
        System.out.println(new ObjectMapper().readValue(paramStr3.getBytes(),UserDTO.class));
        // 失败 会报错 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
        String paramStr4 = "{\"userId\":\"0001\",\"userName\":\"李白\"}";

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值