我正在使用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对象
答案 0 :(得分:1)
无法将@RequestParam
反序列化为PersonDetailsDTO
或LandDetailsDTO
(除非您实现自定义转换器),以便传递复杂对象(无论其类型为{{1}或者输入PersonDetailsDTO
)您必须使用LandDetailsDTO
。
由于控制器方法只能有一个@ResponseBody
,您必须传入一个复合对象,即一个可能包含@ResponseBody
或PersonDetailsDTO
的对象。例如:
LandDetailsDTO
然后在您的控制器方法中查询,例如:
class CompositeDto {
private PersonDetailsDTO personDetails;
private List<LandDetailsDTO> landDetails
}