H5W3
当前位置:H5W3 > 其他技术问题 > 正文

类似这种参数的请求,该怎么用dto接收?

{
 "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字符串的时候都没有发生变化,而首字母大写的默认改成了小写。
两种方法解决:

  1. 直接在字段上方加这个注解@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

本文地址:H5W3 » 类似这种参数的请求,该怎么用dto接收?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址