/ / Konwersja MultiValueMap zwróconej przez FormHttpMessageConverter na obiekt domeny - java, spring, restcontroller

Konwertuj MultiValueMap zwróconą przez FormHttpMessageConverter na obiekt domeny - java, spring, restcontroller

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 1

wystarczy 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.