fragmento de código:HTTP Post con forma de tipo contenido de la petición que no trabajan en 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");
}
vez recibida la petición, Lo que tengo es código de estado HTTP 415: El servidor rechazó esta solicitud porque la entidad de solicitud es en un formato no admitido por el recurso solicitado para el método solicitado().
si cambio el código para esto:
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");
}
voy a tener 405 Método no permitido. Lo gracioso está en el encabezado de permiso de respuesta, enumera GET y POST como métodos permitidos.
tengo una clase que hace JOSN mapeo:
@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 de ejemplos de primavera. funciona muy bien con el tipo de contenido JSON.
Una pregunta más general es cómo hacer que los controladores de solicitudes mvc de primavera funcionen con diferentes tipos de contenido de solicitud. Cualquier consejo sería muy apreciado.
Por cierto, ¿dónde lo descubriste? desde cualquier documento de referencia (si es así, ¿puedes compartirlo?) o por intento y error? – Bobo
@Bobo: El hecho de que 'FormHttpMessageConverter' produzca' MultiValueMap' se puede encontrar en su javadoc: http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/http/converter /FormHttpMessageConverter.html – axtavt
Vaya. No revisó el javadoc. Otra cosa que no entiendo es por qué spring framework no detectará eso y me lanzará un mensaje de error en el momento del despliegue. – Bobo