2017-10-25 1 views
0

私はSpringブートを使用しています。土地の詳細を持つ人物の詳細を取得するメソッドが必要です。 人は任意の数の土地を所有することができます。 私は次のメソッドを作成しているが、それは2つの異なる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 

から人物の詳細を投稿することができますが、私はポストにこれらの両方を混乱しています。

誰もが(カスタムコンバータを実装していない限り)@RequestParamPersonDetailsDTOまたはLandDetailsDTOに直列化復元することはできませんどのように私は春ブーツAPIでJSONオブジェクトの二つの異なる種類を投稿することができ

答えて

1

を教えてもらえそう合格するために、 (PersonDetailsDTOタイプであるかLandDetailsDTOタイプであるかにかかわらず)@ResponseBodyを使用する必要があります。

コントローラーメソッドは@ResponseBodyの1つしか持てないため、コンポジットオブジェクト、つまりPersonDetailsDTOまたはLandDetailsDTOのいずれかを含むオブジェクトを渡す必要があります。たとえば、次のように、その後

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

例えば、あなたのコントローラメソッドの内部でこれを調べる:

if (compositeDto.containsPersonDetails()) { 
    // ... 
} else if (compositeDto.containsLandDetails()) { 
    // ... 
} 
関連する問題