问题描述
由于Jackson试图反序列化我的POJO,我收到了上述错误。
I am getting the above error, due to a problem with Jackson attempting to deserialize my POJO.
我调试了代码并在Jackson的ObjectMapper中返回false :
I've debugged the code and it returns false within Jackson's ObjectMapper:
public boolean canRead(Type type, Class<?> contextClass, MediaType mediaType) {
JavaType javaType = getJavaType(type, contextClass);
return (this.objectMapper.canDeserialize(javaType) && canRead(mediaType));
}
this.objectMapper.canDeserialize(javaType)返回false导致错误
this.objectMapper.canDeserialize(javaType) returns false which causes the error
我的控制器如下:
@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);
}
我的CancelRequestDTO实现Serializable:
My CancelRequestDTO implements 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;
}
}
我的Spring配置如下:
My Spring configuration is as follow:
<!-- 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>
任何人都知道可能导致什么这个反序列化问题?
Anyone know what might be causing this deserialization issue?
谢谢
推荐答案
由于我的DTO没有默认构造函数有了二传手!所以看起来像杰克逊的不正确的例外
Caused by my DTO not having a default constructor with setters! So looks like an inaccurate Exception from Jackson
这篇关于Spring REST:HttpMediaTypeNotSupportedException:内容类型'application / json; charset = UTF-8'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!