Postagem HTTP com formulário de tipo de conteúdo de solicitação que não funciona no Spring MVC 3
fragmento de código:
@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");
}
Depois de receber a solicitação, o que recebi é o código de status Http 415: O servidor recusou essa solicitação porque a entidade da solicitação está em um formato não suportado pelo recurso solicitado para o método solicitado ().
Se eu mudar o código para isso:
fragmento de código:
@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");
}
Vou receber o método 405 não permitido. O engraçado é que no cabeçalho de resposta de permissão, ele lista GET e POST como métodos permitidos.
Eu tenho uma classe que faz o mapeamento 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;
}
}
Copiado dos exemplos do Spring. funciona muito bem com o tipo de conteúdo JSON.
Uma pergunta mais geral é como fazer com que os manipuladores de solicitação do Spring Mvc funcionem com diferentes tipos de conteúdo de solicitação. Qualquer conselho seria muito apreciado.