问答

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

作者:admin 2021-07-13 我要评论

{ "Data":{ "mobile":"1222222223", "code":202, "name":"2222" }} 请问接口的DTO该如何定义? ================分割线=================== DTO定义如下 @Datapu...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
{
 "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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 类似这种参数的请求,该怎么用dto接收

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

  • Vue Router跳转无效求助!

    Vue Router跳转无效求助!

  • .ts文件识别不了.vue 文件

    .ts文件识别不了.vue 文件

  • typescript 常量的最佳实践

    typescript 常量的最佳实践

腾讯云代理商
海外云服务器