【问题标题】:Posting two different JSON objects发布两个不同的 JSON 对象
【发布时间】:2018-04-06 11:49:14
【问题描述】:

我正在使用 Spring Boot,其中我想要一种方法来获取人员的详细信息及其土地详细信息。 一个人可以拥有任意数量的土地。 我创建了以下方法,但它不起作用

@PutMapping("/fl-details/{f}/{l}")
@Timed
public ResponseEntity<PersonDetailsDTO> updateDetails(@RequestParam("f") PersonDetailsDTO personDetailsDTO,
    @RequestParam("l") List<LandDetailsDTO> landDetailsDTOS) throws URISyntaxException {
    if (personDetailsDTO.getId() == null || landDetailsDTOS.iterator().next().getId() == null) {
        return createFarmerDetails(personDetailsDTO,landDetailsDTOS);
    }

    PersonDetailsDTO result = personDetailsService.save(personDetailsDTO);

    landDetailsDTOS.stream().forEach(landDetailsService::save);

    return ResponseEntity.ok()
        .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_PERSON+ENTITY_LAND, personDetailsDTO.getId().toString()))                    
        .body(result);
}

我可以从

发布个人详细信息
@ResponseBody PersonDetailsDTO personDetailsDTO

但我对这两个帖子都感到困惑。

谁能告诉我如何在 Spring Boot API 中发布两种不同的 JSON 对象

【问题讨论】:

    标签: json spring spring-mvc spring-boot http-post


    【解决方案1】:

    不能将@RequestParam 反序列化为PersonDetailsDTOLandDetailsDTO(除非您实现自定义转换器),以便传递复杂对象(无论是PersonDetailsDTO 类型还是LandDetailsDTO 类型)你必须使用@ResponseBody

    由于控制器方法只能有一个@ResponseBody,因此您必须传入一个复合对象,即一个可以包含PersonDetailsDTOLandDetailsDTO 的对象。例如:

    class CompositeDto {
        private PersonDetailsDTO personDetails;
        private List<LandDetailsDTO> landDetails
    }
    

    然后在你的控制器方法中询问这个,例如:

    if (compositeDto.containsPersonDetails()) {
        // ...
    } else if (compositeDto.containsLandDetails()) {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多