发布两个不同的JSON对象

时间:2017-10-25 11:43:58

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

我正在使用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对象

1 个答案:

答案 0 :(得分:1)

无法将@RequestParam反序列化为PersonDetailsDTOLandDetailsDTO(除非您实现自定义转换器),以便传递复杂对象(无论其类型为{{1}或者输入PersonDetailsDTO)您必须使用LandDetailsDTO

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

LandDetailsDTO

然后在您的控制器方法中查询,例如:

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