2016-06-21 2 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); 
} 
관련 문제