Sto studiando come Spring handle REST servizi web e ho alcuni dubbi relativi al concetto di HttpMessageConverter.Come funziona esattamente l'annotazione @RequestBody e in che modo è correlata all'interfaccia HttpMessageConverter?
Sulla documentazione ufficiale posso leggere:
interfaccia strategia che specifica un convertitore che può convertire da e alle richieste HTTP e le risposte.
Così il HttpMessageConverter sembra essere un'interfaccia, ma che cosa è esattamente un'interfaccia strategia? Qualcosa è collegato al modello di strategia oppure no?
Quindi, da quello che ho capire Primavera fornire automaticamente alcune implementazioni registrati per impostazione predefinita quando si utilizza @EnableWebMvc o
Ma che cosa significa esattamente questi implementazione? Puoi fornirmi un esempio pratico?
Penso che funziona in questo modo:
Per esempio eseguire un cliente un HttpRequest mettendo nel corpo di questa richiesta un JSON messaggio (non sono così pratico ma penso che posso fare qualcosa in questo modo), quindi il controller che gestisce questo HttpRequst utilizza un'implementazione di HttpMessageConverter per convertire questo messaggio JSON in un oggetto modello. Penso che sia vero anche il contrario.
Il mio ragionamento è corretto o mi manca qualcosa?
Un altro dubbio è relativo all'annotazione @RequestBody (che penso sia correlata all'argomento precedente).
ho questo esempio:
@RequestMapping(value="/orders/{id}", method=RequestMethod.PUT)
@ResponseStatus(HttpStatus.NO_CONTENT) // 204
public void updateOrder(@RequestBody Order updatedOrder, @PathVariable("id") long id) {
// process updated order data and return empty response
orderManager.updateOrder(id, updatedOrder);
}
Quindi penso che @RequestBody Ordinare updatedOrder prendere il valore del parametro di ingressoupdatedOrder dal corpo della HttpRequest e poi convertirlo con in un Ordinare l'oggetto utilizzando un'implementazione di HttpMessageConverter.
È giusto o mi manca qualcosa? Se è giusto come può scegliere il convertitore giusto?
Per esempio qui ho trovato un altro esempio simile al precedente: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
@Controller
@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
// implementation omitted
}
Penso che qui è espressamente specificato che è necessario utilizzare un JSON MODELLI convertitore OGGETTO. Perché nell'esempio precedente non è specificato? Come può scegliere il convertitore giusto?
Tnx
Spiegazione perfetta, sei un ninja, indivia per te uomo – AndreaNobili