Цель: сделать общую реализацию для запросов PATCH с использованием API reflextion.Соедините вход JSON с java.util.Map, используя Spring MVC и Jackson
Контекст: ранее был запрос POST (вход JSON: полный объект, все поля). Теперь я хочу заменить его запросом PATCH (вход JSON: частичный объект, только обновленные поля). Поэтому мне нужно заменить @RequestBody Entity entity
чем-то вроде @RequestBody Map<String, Object> entityFieldValues
.
вход в формате JSON:
{
"active": false
}
Что я пробовал:
@RequestMapping(value = "/{entityId}", method = RequestMethod.PATCH)
public void patch(@PathVariable("entityId") final Long entityId, @RequestBody Map<String, Object> fieldValues) {
// load entity from DB and update values using reflection (BeanUtils)
service.patch(entityId, fieldValues);
}
Это не работает. Когда я тестирую этот контроллер с помощью POSTMAN, я столкнулся с ошибкой 501 HTTP, которая не реализована. На данный момент я использую следующий обходной путь:
@RequestMapping(value = "/{entityId}", method = RequestMethod.PATCH)
public void tooglePublished(@PathVariable("entityId") final Long entityId, @RequestBody String body) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
// TODO : make it work using something like: @RequestBody Map<String, String> fieldValues
Map<String, Object> fieldValues = mapper.readValue(body,new TypeReference<Map<String, Object>>() {});
// load entity from DB and update values using reflection (BeanUtils)
service.patch(entityId, fieldValues);
}
ли кто-нибудь знает, как я могу заставить его работать с использованием Spring MVC аннотаций?
Весна 4.1.1.RELEASE Джексон 1.9.13
Благодаря