【问题标题】:Multiple DTOs manual initialize多个 DTO 手动初始化
【发布时间】:2021-12-28 13:33:40
【问题描述】:

在微服务中,我们将多个 dtos 数据发布为字符串 json。

控制器:

@RequestMapping(value="/json",method = RequestMethod.POST)
public String getjson(@RequestBody String json) {

   ///Service process
}

发布 Json:

{
"dtos":{
    "Dto1":{   
        "name":"Dto1 Name Field",
        "filter":[
            {"key":"f1","value":1},
            {"key":"f2","value":10}
        ]
    },
    "Dto2":{
        "city":"Newyork",    
        "filter":[
            {"key":"f1","value":1},
            {"key":"f2","value":10},
    {"key":"f3","value":10}
        ]
    }
},
"page":1
}

DTO:

public class Dto1{
   private String name;
}
public class Dto2{
   private String city;
}

Dto1 和 Dto2 是 java DTO 对象名。 如何将字符串json转换为java对象?

【问题讨论】:

    标签: java json spring-boot rest controller


    【解决方案1】:

    您可以创建一个包含所有 attrs 并在请求中接收的新 DTO:

    public class Filter{
        private String key;
        private int value;
    }
    
    public class Dto1{
        private String name;
        private List<Filter> filter;
    }
    
    public class Dto2{
        private String city;
        private List<Filter> filter;
    }
    
    public class Dtos{
        public Dto1 dto1;
        public Dto2 dto2;
    }
    
    public class DtoToReceiveInRequest{
        private Dtos dtos;
        private int page;
    }
    
    

    控制器

    @PostMapping
    public String getjson(@RequestBody DtoToReceiveInRequest json) {
    
       ///Service process
    }
    
    

    【讨论】:

      【解决方案2】:

      您可以使用 jackson 库中的 ObjectMapper,如下所示。

      String json = "";
      ObjectMapper objectMapper = new ObjectMapper();
      Dto1 dto = objectMapper.readValue(json, Dto1.class);
      

      但在您的特定示例中,您不必有两个 DTO 类。您可以将值封装在一个 DTO 中,并以 json 格式列出该 DTO 的不同实例。

      注意。 json 字符串应该是您要检索的首选类的表示形式,例如 Dto1.java。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        相关资源
        最近更新 更多