Я работаю над проектом Java Spring Boot. У меня есть сущность, у которой 20 полей. В настоящее время у меня есть метод PUT, который принимает эти 20 полей, все они не являются нулевыми, и я проверяю их, используя валидаторы, включая моих пользовательских валидаторов. Но это дорого. Даже если я хочу изменить одно поле в своем БД, я полностью приношу строку, обновляю все поля, используя пользовательский карт и сохранить в дБ. В этой реализации, даже если только одно поле меняется, я должен отправлять все поля в запросе, а также перезаписываю 19 неизменного поля в БД, что является дорогостоящим. Я ищу решения: < /p>
Я должен быть в состоянии отправлять только поля, которые должны измениться, и я должен быть в состоянии проверить их на уровне DTO, используя валидатор (например: я должен быть в состоянии проверить, значения между 0 и 100. В текущем реализации у меня есть пользовательский валидатор для этого) < /li>
я должен быть в состоянии, чтобы это было в обращении только к этому. Я не должен перезаписывать значения, которые должны оставаться такими же. < /Li>
(своего рода необязательно) было бы лучше, если бы это могло быть общим. Я могу легко адаптироваться для своих различных контроллеров. < /Li>
< /ol>
Я искал размышления Java и нашел эту реализацию: < /p>
@PatchMapping("/{id}")
public Product updateProductFields(@PathVariable int id,@RequestBody Map fields){
return service.updateProductByFields(id,fields);
}
< /code>
public Product updateProductByFields(int id, Map fields) {
Optional
existingProduct = repository.findById(id);
if (existingProduct.isPresent()) {
fields.forEach((key, value) -> {
Field field = ReflectionUtils.findField(Product.class, key);
field.setAccessible(true);
ReflectionUtils.setField(field, existingProduct.get(), value);
});
return repository.save(existingProduct.get());
}
return null;
}
< /code>
public interface ProductRepository extends
JpaRepository {
}
< /code>
But I am not sure if this satisfies my desires. Do you have any suggestions?
Подробнее здесь: https://stackoverflow.com/questions/777 ... pring-boot