2016-06-21 9 views
0

私はCRUDコントローラからメソッド「更新」を持っている:存在オブジェクトへのマッピング方法は?

@PutMapping(value = "/{id}") 
public ResponseEntity<?> update(
     @PathVariable("id") Long id, 
     @RequestBody Entity entity 
) { 
    repository.saveAndFlush(entity); 
    return ResponseEntity.ok(entity); 
} 

これは、エンティティの新しいインスタンスを作成するコードです。 RequestBodyを既存のエンティティにマッピングするにはどうすればよいですか?次のようなもの:

public ResponseEntity<?> update(
     @RequestBody @LoadById(@PathVariable("id")) Entity entity 
) 

ありがとうございます。

+0

あなたはPUTとしませんし、POSTが(再)に必要なすべてのデータが含まれているエンティティを構築する必要があります。そうでない場合は、これを有効にするために独自のHttpMessageConverterを作成する必要があります。 –

+0

ありがとうございます。 –

答えて

1

マッピング例:

@RequestMapping(method = RequestMethod.PUT, value = "/{id}") 
public ResponseEntity<?> update(
     @PathVariable("id") Long id, 
     @Valid @RequestBody Entity entity 
) { 
    Entity oldEntity = repository.findOne(id); 

    AnnotatedClass annotatedClass = AnnotatedClass.construct(
      entity.getClass(), 
      objectMapper.getDeserializationConfig().getAnnotationIntrospector(), 
      new SimpleMixInResolver(null) 
    ); 

    Iterator<AnnotatedField> fields = annotatedClass.fields().iterator(); 
    while (fields.hasNext()) { 
     AnnotatedField field = fields.next(); 
     if (!objectMapper.getDeserializationConfig().getAnnotationIntrospector().hasIgnoreMarker(field)) { 
      field.fixAccess(); 
      field.setValue(oldEntity, field.getValue(entity)); 
     } 
    } 

    repository->save(oldEntity); 
    return ResponseEntity.ok(oldEntity); 
} 
関連する問題