Publikuję x-www-formurlencoded
ciąg do mojej aplikacji odpoczynku wiosennego i automatycznie konwertuje ją na wartość domyślną MultiValueMap<String, Object>
obiekt i przekazuje go jako parametr taki jak:
@RequestMapping(method = RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public User save(@Valid @RequestBody final MultiValueMap<String, Object>
userMultiValueMap) {
...
}
W jaki sposób mogę dostosowywać moje domyślne procedury obsługi, tak aby określony obiekt domeny (np User
obiekt) jest automatycznie odwzorowywany i może być przekazywany jako parametr. Wyglądałoby to jak automatyczne wiązanie, które uzyskujesz za pomocą zwykłego application/json
post z następującymi:
@RequestMapping(method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public User save(@Valid @RequestBody final User user) {
...
}
User
obiekt jest mapowany i tworzony z pliku application/json
Żądaj postu. Jak mogę skonfigurować mój? HttpMessageConverter
obsługa, aby osiągnąć coś podobnego x-www-formurlencoded
i uzyskaj obiekt domeny, a nie a MultiValueMap
który jest dostarczany z domyślną obsługą w FormHttpMessageConverter
.
Odpowiedzi:
-1 dla odpowiedzi nr 1wystarczy dodać MappingJackson2HttpMessageConverter do konwerterów, a Spring powinien być w stanie zrobić to, co chcesz automatycznie.
musisz również mieć bibliotekę jackson na ścieżce klas, a Twój użytkownik musi być komponentem Java bean.
jeśli chcesz tworzyć dane zamiast JSONA, potrzebujesz tylko FormHttpMessageConverter. Usuń także część consumes = ... json z adnotacji metody.