2017-10-25 3 views
0

나는 토지 세부 사항을 가진 사람의 세부 정보를 얻는 방법을 원한다. 사람은 여러 개의 땅을 가질 수 있습니다. 나는 다음과 같은 방법을 만들었습니다하지만두 개의 다른 JSON 객체 게시

@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 

에서 개인 정보를 게시 할 수 있습니다 작동하지 않습니다하지만 난 이후에이 두 가지를 혼동 얻고있다.

사람이 내가 봄 부팅 API에서 JSON 개체의 두 가지 다른 종류를 게시 할 수있는 방법을 말해 줄 수하는

답변

1

@RequestParam에 직렬화 복원 할 수없는 것은 PersonDetailsDTO 또는 (사용자 정의 컨버터를 구현하지 않는 한) LandDetailsDTO 그래서 순서대로 통과하려면 (PersonDetailsDTO 유형이든 LandDetailsDTO 유형이든) @ResponseBody을 사용해야합니다.

컨트롤러 메서드는 @ResponseBody 하나만 가질 수 있으므로 복합 개체, 즉 PersonDetailsDTO 또는 LandDetailsDTO을 포함 할 수있는 복합 개체를 전달해야합니다. 예를 들어 다음

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

그리고 예를 들어, 컨트롤러 메소드 내에서이 심문 :

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