Моя задача реализовать PATCH метод контроллера. Рассмотрим два случая:
Spring в обоих случаях заполняет поле в DTO значением null, и сервис по изменению сущности не может различить две ситуации
В laravel (php) такое сделать легко - там данные из запроса сохраняются в ассоциативный массив. Можно проверить наличие того или иного поля в массиве.
Как быть в java?
Вот так попробуйте
@//тип_запросаMapping
@ResponseBody
public ResponseEntity<Ваш тип> method(@RequestParam(value = "parameter", required = false) Boolean parameter,
@RequestParam(value = "id", required = false) Long id) {
Проблему решил с помощью Optional. Обернутые в Optional поля могут быть представлены как null - если в запросе не было представлено это поле или Optional.empty - если поле передано как null явно
В данном случае у Spring нет точного решения. Можно в контроллере принимать объект в виде Map из полей и поочередно устанавливать значения полученных полей. Например:
@PatchMapping("/{id}")
public ResponseEntity partialUpdate(@PathVariable Long id, @RequestBody Map<String, Object> fields) {
YourEntity entity = findYourEntity(id);
fields.forEach((fieldName, value) -> {
Field field = ReflectionUtils.findField(KpiDataRecord.class, fieldName);
ReflectionUtils.setField(field, entity, value);
});
saveObject(yourObject);
return ResponseEntity.ok().build();
}
В данным решении используется Reflection для установления значений полей нового объекта. Но в таком случае пропадает возможность удобной валидации получаемых объектов.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
"Which lambda can replace MySecret class?"
Пробую использовать готовую базу данных с SugarORM, копирую DB в нужную папку getApplicationContext()getDatabasePath("data
Есть небольшой vue проектИспользую bootstrap-vue