2016-06-21 5 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); 
} 
Смежные вопросы