extrait de code:Http Poster avec la forme de type de contenu de la demande ne fonctionne pas dans Spring MVC 3
@RequestMapping(method = RequestMethod.POST)//, headers = "content-type=application/x-www-form-urlencoded")
public ModelAndView create(@RequestBody UserAccountBean account) {
try{
accounts.put(account.assignId(), account);
}catch(RuntimeException ex)
{
return new ModelAndView("account/registerError");
}
return new ModelAndView("account/userVerification");
}
Après réception de la demande, ce que je suis est Http Code d'état 415: Le serveur a refusé cette demande parce que l'entité de demande est dans un format non pris en charge par la ressource demandée pour la méthode demandée().
Si je change le code à ceci:
extrait de code:
@RequestMapping(method = RequestMethod.POST,headers = "content-type=application/x-www-form-urlencoded")
public ModelAndView create(@RequestBody UserAccountBean account) {
try{
accounts.put(account.assignId(), account);
}catch(RuntimeException ex)
{
return new ModelAndView("account/registerError");
}
return new ModelAndView("account/userVerification");
}
Je vais obtenir 405 Méthode non autorisée. Une chose amusante est dans l'en-tête allow de la réponse, elle liste GET et POST comme méthodes autorisées.
J'ai une classe qui fait la cartographie JOSN:
@Component
public class JacksonConversionServiceConfigurer implements BeanPostProcessor {
private final ConversionService conversionService;
@Autowired
public JacksonConversionServiceConfigurer(ConversionService conversionService) {
this.conversionService = conversionService;
}
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof AnnotationMethodHandlerAdapter) {
AnnotationMethodHandlerAdapter adapter = (AnnotationMethodHandlerAdapter) bean;
HttpMessageConverter<?>[] converters = adapter.getMessageConverters();
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof MappingJacksonHttpMessageConverter) {
MappingJacksonHttpMessageConverter jsonConverter = (MappingJacksonHttpMessageConverter) converter;
jsonConverter.setObjectMapper(new ConversionServiceAwareObjectMapper(this.conversionService));
}
}
}
return bean;
}
}
Copié à partir des exemples de printemps. fonctionne très bien avec le type de contenu JSON.
Une question plus générale est de savoir comment faire en sorte que les gestionnaires de requêtes printaniers mvc fonctionnent avec différents types de contenu de requête. Tout conseil serait grandement apprécié.
BTW, où avez-vous découvert cela? de tous les documents de référence (si oui, pouvez-vous partager s'il vous plaît?) ou par essai et erreur? – Bobo
@Bobo: Le fait que 'FormHttpMessageConverter' produise' MultiValueMap' peut être trouvé dans son javadoc: http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/http/converter /FormHttpMessageConverter.html – axtavt
Oops. Je n'ai pas vérifié le javadoc. Une autre chose que je ne comprends pas est pourquoi Spring framework ne détectera pas cela et me lancer une erreur msg au moment du déploiement. – Bobo