问题描述:今天请求第三方接口需要了这种类型的异常,因为提供接口的人还没有给反馈,所以自己实现了下,代码过程如下:
一般遇到这种情况就是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反序列化的时候就会遇到类似于上面的错误