{
"Data":{
"mobile":"1222222223",
"code":202,
"name":"2222"
}
}
请问接口的DTO该如何定义?
================分割线===================
DTO定义如下
@Data
public class CallbackDTO {
private DataInfo Data;
@Data
public class DataInfo {
private String mobile;
private Integer code;
private String name;
}
}
报错如下
"timestamp": 1592473738332,
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Unrecognized field \"Data\" (class com.xx.xx.modules.blockchain.dto.CallbackDTO), not marked as ignorable; nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field \"Data\" (class com.xx.xx.modules.blockchain.dto.CallbackDTO), not marked as ignorable (one known property: \"data\"])\n at [Source: (PushbackInputStream); line: 2, column: 10] (through reference chain: com.xx.xx.modules.blockchain.dto.CallbackDTO[\"Data\"])",
================分割线===================
当请求参数为
{
"Data":{
"mobile":"1222222223",
"code":202,
"name":"2222"
}
}
时会报如上错误。
当请求参数为
{
"data":{
"mobile":"1222222223",
"code":202,
"name":"2222"
}
}
时(Data首字母大小写不一样),不会报错,请问代码该如何改动?
###public Class InterfaceDTO {
private DataDTO Data;
}
public Class DataDTO {
private String mobile;
private int code;
private String name;
}
###
java中json转对象首字母大写的会默认改成小写,可能是为了java的编写规范。
全大写、首字母小写、全部小写的字段在装json字符串的时候都没有发生变化,而首字母大写的默认改成了小写。
两种方法解决:
- 直接在字段上方加这个注解@JsonProperty
(注意:如果是方法1需要在对应 的字段上的get set方法需要添加 @JsonIgnore 要不然无效)
@Data
public class CallbackDTO {
@JsonProperty
private DataInfo Data;
@Data
public class DataInfo {
private String mobile;
private Integer code;
private String name;
}
@JsonIgnore
public String getData() {
return Data;
}
@JsonIgnore
public void setData(DataInfo Data) {
this.Data = Data;
}
}
2.方法二相对简单点 @JsonProperty(value = "SName") value的值就是你要的字段名
@Data
public class CallbackDTO {
@JsonProperty(value = "Data")
private DataInfo Data;
@Data
public class DataInfo {
private String mobile;
private Integer code;
private String name;
}
}
###public static class DataInfo