由于杰克逊(Jackson)试图反序列化我的POJO出现问题,因此出现上述错误。
我调试了代码,它在Jackson的ObjectMapper中返回false:
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导致错误
我的控制器如下:
@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:
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配置如下:
<!-- 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>
有谁知道可能导致此反序列化问题的原因?
谢谢
由于我的DTO没有带有setter的默认构造函数!所以看起来像杰克逊的一个不正确的异常