Недавно у меня была такая же проблема с SpringMVC и Jackson!
В Spring, когда вы явно настраиваете свою конечную точку на использование только application/x-www-form-urlencoded
запросов, Spring может сериализоваться в ваши классы POJO, но не использует Jackson, потому что это не JSON.
Итак, чтобы эти аннотации Джексона работали с вашим POJO, вам необходимо:
- Получите ваши данные в виде карты
- Анализируйте карту данных с помощью ObjectMapper Джексона
В моем случае с помощью Spring я мог бы решить эту проблему с помощью следующего кода:
@RequestMapping(
value = "/rest/sth",
method = RequestMethod.POST
)
public ResponseEntity<String> create(@RequestBody MultiValueMap paramMap) { ... }
Когда вы удаляете атрибут "consumes" из аннотации @RequestMapping
, вы должны использовать @RequestBody
, иначе Spring не сможет идентифицировать вашу карту как допустимый параметр.
Вы, вероятно, заметите, что MultiValueMap
- это не обычная карта. Значением каждого элемента является LinkedList
, потому что данные формы http могут повторять значения, и поэтому эти значения будут добавлены в этот связанный список.
Имея это в виду, вот простой код для получения первого элемента и создания другой карты для преобразования в ваш POJO:
HashMap<String, Object> newMap = new HashMap<>();
Arrays.asList(new String[]{"my_name", "my_phone"})
.forEach( k -> newMap.put(k, ((List<?>) paramMap.get(k)).get(0)));
MyRequest myrequest = new ObjectMapper().convertValue(newMap, MyRequest.class);
Надеюсь, это поможет вам, как помогло мне :)
person
Sidharta Noleto
schedule
10.09.2016