Spring REST: HttpMediaTypeNotSupportedException: type de contenu 'application / json; charset = UTF-8'
J'obtiens l'erreur ci-dessus, en raison d'un problème avec Jackson tente de désérialiser mon POJO.
J'ai débogué le code et il renvoie la valeur false à l'intérieur de Jackson ObjectMapper:
public boolean canRead(Type type, Class<?> contextClass, MediaType mediaType) {
JavaType javaType = getJavaType(type, contextClass);
return (this.objectMapper.canDeserialize(javaType) && canRead(mediaType));
}
.objectMapper.canDeserialize(javaType) renvoie false, ce qui provoque l'erreur
Mon Contrôleur est comme suit:
@Controller
public class CancelController {
@Autowired
private CancelService cancelService;
@RequestMapping( value="/thing/cancel", method=RequestMethod.POST, consumes="application/json" )
public @ResponseBody CancelThingResponseDTO cancelThing(@RequestBody CancelRequestDTO cancelThingRequest) {
return cancelService.cancelThing(cancelThingRequest);
}
Mon CancelRequestDTO implémente Serializable:
public class CancelRequestDTO implements Serializable{
/**
* Default serialization ID
*/
private static final long serialVersionUID = 1L;
/**
* Reason code associated with the request
*/
private final String reasonCode;
/**
* Identifier of the entity associated with the request
*/
private final EntityIdentifier entityIdentifier;
/**
* Default constructor
*
* @param reasonCode Reason code associated with the request
* @param entityIdentifier Identifier of the entity associated with the request
*/
public CancelRequestDTO(String reasonCode, EntityIdentifier entityIdentifier) {
super();
this.reasonCode = reasonCode;
this.entityIdentifier = entityIdentifier;
}
/**
* @return Returns the reasonCode.
*/
public String getReasonCode() {
return reasonCode;
}
/**
* @return Returns the entityIdentifier.
*/
public EntityIdentifier getEntityIdentifier() {
return entityIdentifier;
}
}
Mon Ressort de configuration est comme suit:
<!-- DispatcherServlet Context: defines this servlet's request-processing
infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<mvc:annotation-driven />
<!-- Scan for stereotype annotations -->
<context:component-scan base-package="com.cancel.web.controller" />
<bean id="viewNameTranslator"
class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator" />
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
<bean id="jsonView"
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" >
<property name="contentType" value="application/json;charset=UTF-8"/>
</bean>
<!-- Register JSON Converter for RESTful Web Service -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>
</list>
</property>
</bean>
Ce que quelqu'un sait ce qui pourrait être à l'origine de ce désérialisation problème?
Grâce
source d'informationauteur DJ180
Vous devez vous connecter pour publier un commentaire.
Causé par mon DTO de ne pas avoir un constructeur par défaut avec les poseurs! Regarde donc comme une fausse Exception de Jackson
Pour n'importe qui qui encore confrontés à ce problème, vous ne pouvez pas avoir deux
@JsonBackReference
dans une seule catégorie, ajouter de la valeur à l'une des référence de cette@JsonBackReference(value = "secondParent")
également ajouter la même valeur à@JsonManagedReference(value ="secondParent")
dans la classe parent.Je l'ai toujours fait cela à l'aide de la ContentNegotiatingViewResolver. Il semble qu'il n'est pas de comprendre le type de contenu que vous êtes de passage. C'est la configuration que j'utilise généralement pour faire ce que vous essayez de faire:
Cette vidéo passe par faire exactement ce que vous essayez de faire avec la consommation du service par le biais de jQuery dans l'INTERFACE utilisateur:
http://pluralsight.com/training/Courses/TableOfContents/springmvc-intro