如何映射到存在对象?
问题描述:
我有方法“更新”从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
)
谢谢。
答
映射例如:
@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);
}
你不为PUT和POST应该包含需要(重新)的所有数据构建实体。如果不是这种情况,你将不得不编写自己的HttpMessageConverter来启用它。 –
谢谢你的帮助。 –