com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "xxx"

问题描述:今天请求第三方接口需要了这种类型的异常,因为提供接口的人还没有给反馈,所以自己实现了下,代码过程如下:

一般遇到这种情况就是json反序列化失败了,首先我们定义个实体类

@Data //注意我这里用了lombok
public class GetUnionIdRequest  implements Serializable {

    private static final long serialVersionUID = 5582889924807753288L;

    private String industryCode;
    private String userId;
    private String cardNum;

}

加入jackson依赖jar包

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.3</version>
        </dependency>

测试类

public class CentralServiceTest {
    public static void main(String[] args) throws IOException {
        String json="{"cardNum":"10100054118975234012","userId":"10015168312974","industryCode":"5411"}";
        ObjectMapper MAPPER = new ObjectMapper();
        GetUnionIdRequest getUnionIdRequest = MAPPER.readValue(json, GetUnionIdRequest.class);
         System.out.println(getUnionIdRequest);

    }
}

测试上面程序得到如下测试结果

GetUnionIdRequest(industryCode=5411, userId=10015168312974, cardNum=10100054118975234012)

如上图所示,正确反序列化了,这没毛病,那么现在我们来模拟一下错误的情况,还是实体类,这次我们去掉lombok,自己生成getset方法

public class GetUnionIdRequest  implements Serializable {

    private static final long serialVersionUID = 5582889924807753288L;

    private String industryCode;
    private String userId;  
    private String cardNum; //注意 userId是没有getset方法的

    public String getIndustryCode() {
        return industryCode;
    }

    public void setIndustryCode(String industryCode) {
        this.industryCode = industryCode;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
}

我们再次执行上面的main函数,得到如下结果

Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "cardNum" (class com.tuspass.bus.payment.service.central.bean.GetUnionIdRequest), not marked as ignorable (2 known properties: "industryCode", "userId"])
 at [Source: {"cardNum":"10100054118975234012","userId":"10015168312974","industryCode":"5411"}; line: 1, column: 13] (through reference chain: com.tuspass.bus.payment.service.central.bean.GetUnionIdRequest["cardNum"])
	at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:62)

后来经过测试,其实不用set属性方法,但是必要要有get属性方法,不然jackson反序列化的时候就会遇到类似于上面的错误

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值