当前位置: 首页 > 知识库问答 >
问题:

从RestyGwt发布dto时,Spring-MVC缺少@class-information

鲁熙云
2023-03-14
@RequestMapping(method = RequestMethod.POST consumes = RestApiConstants.JSON, produces = RestApiConstants.JSON)
@ResponseBody
public CustomerDto post(@RequestBody final CustomerDto dto) {
  // save it
}
 2014-11-07 14:20:55 ERROR ... Probably Jackson Mapper has failed.
 org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property '@class' that is to contain type id  (for class com.our.package.CustomerDto)
  at [Source: java.io.PushbackInputStream@66be55c7; line: 1, column: 988]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property '@class' that is to contain type id  (for class com.our.package.CustomerDto)
  at [Source: java.io.PushbackInputStream@66be55c7; line: 1, column: 988]
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:208)
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:200)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:181)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:104)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77)
    ...
 Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property '@class' that is to contain type id  (for class com.our.package.CustomerDto)
  at [Source: java.io.PushbackInputStream@66be55c7; line: 1, column: 988]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
    at com.fasterxml.jackson.databind.DeserializationContext.wrongTokenException(DeserializationContext.java:784)
     ...
@JsonSubTypes({
    @Type(Customer.class),
    @Type(Supplier.class)
})
@JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY, property = "@class")
public abstract class PartnerDto {
  // ...
}

public class CustomerDto extends PartnerDto {
  // ...
}
{   
  "name": "Testname",
  "age": 50,
  ...
}
{
  "@class": "com.our.package.CustomerDto",
  "name": "Testname",
  "age": 50,
  ...
}

由于我们将Spring和RestyGwt移到Jackson 2映射器(Spring 4.1.1.Release,RestyGwt 2.0-Snapshot,Jackson 2.3.2)中,因此出现了此问题。它适用于较早的版本(Spring 4.0.7.Release、RestyGWT 1.4、Jackson 1.9.13)。

我怎么处理?

共有1个答案

姬存
2023-03-14

我为resty gwt创建了一个单元测试失败的请求。

https://github.com/resty-gwt/resty-gwt/pull/212

当为具体实现而不是公共超级类型创建JsonEncoder时,会出现问题。

 类似资料:
  • 我正在尝试使用SpringMVC(来自Spring boot 1.2.3.Release)向我的Rest控制器添加一个矩阵参数(或矩阵变量),下面是我的代码: 这就是我得到的答案: 出现错误(类型=错误请求,状态=400)。 String类型的方法参数缺少矩阵变量“agent name” 我做错了什么?根据http://docs.spring.io/spring-framework/docs/3.

  • 我有一个SpringMVC 4。在应用程序上下文XML文件中定义了多个静态资源的x应用程序,如下所示: 这些文件分别存储在“/webapp/static/”目录和“/resources/static/”目录中(请参见映射,分别为和。在“js”和“css”子目录中有一些文件可以访问,但我最近添加的文件在尝试通过Netbeans控制的本地Tomcat服务器访问时返回404个错误。 我尝试了对sprin

  • Spring Boot(1.2.7)web应用程序(响应SSL请求)在Intellij IDEA上运行很好。 构建从命令行运行的JAR工件,启动时抛出错误 null Spring Boot(web)应用程序可以从Intellij IDEA运行,响应https请求,而不需要在application.properties中执行更多的操作。properties: 要从命令行启动JAR工件,我使用: JA

  • 我在Spring MVC应用程序中实现了一个类,它为我扩展了HandlerInterceptorAdapter,以便在执行任何控制器之前在preHandle、postHandle和afterCompletion中执行一些操作。下面是我正在观察的情况。 预处理日志记录的日志条目AppTime:00:30:01.230线程:[http-nio-8080-exec-1]级别:INFO Class:Hel

  • 当我尝试设置时,我得到一个CORS错误原因:CORS头'access-control-allog-origin'丢失 下面是我在Spring MVC中的Cors重写:

  • 我的STS版本:3.7.1.RELEASE,内部版本Id:201510041213,平台:Eclipse Mars。1(4.5.1)在选择例如Spring Starter project时没有创建正确的项目 当与我现有的一个项目进行比较时,我可以看到缺少了Builder。创建的项目仅包含Maven Builder 我的参考项目有Maven、Java和Spring project Builders。