【问题标题】:jackson-databind "object is not an instance of declaring class"jackson-databind“对象不是声明类的实例”
【发布时间】:2017-07-03 03:14:58
【问题描述】:

我一直在升级到更高版本的 jackson(即从 org.codehaus... 到 com.fasterxml...),突然间我遇到了许多奇怪的错误。经过数小时的尝试和调整,我仍然无法让它工作,所以我问你们是否可以帮助我。

我有以下方法:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("getTerminalsByIdAndLocation")
List<SearchResultDto> getTerminalsByIdAndLocation(@QueryParam("location") String location, @QueryParam("id") Integer id) throws BusinessException;

并且该函数实现只是在存储库中进行查找。

SearchResultDto 如下所示:

@JsonIgnoreProperties(ignoreUnknown = true)
public class SearchResultDto implements Serializable {
    private static final long serialVersionUID = 1L;

    private TerminalId terminalId;
    private Integer location;
    private String streetNumber;
    private String postalcoldeCity;
    private Status status;

   // getters and setters with no annotation or so
}

当我现在调用我的方法时,我收到以下错误:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: object is not an instance of declaring class (through reference chain: java.util.ArrayList[0]-&gt;&lt;long package&gt;.SearchResultDto["terminalId"])

经过大量尝试,我认为我将删除 terminalId,然后将其更改为:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: object is not an instance of declaring class (through reference chain: java.util.ArrayList[0]-&gt;&lt;long package&gt;AtmSearchResultDto["location"])

我一无所知,这里有什么问题?

编辑

我也尝试在除String streetNumber 之外的所有内容上使用@JsonIgnore,但同样的异常仅发生在streetNumber

【问题讨论】:

  • 我似乎对类加载器有一些问题。我添加了一些调试输出(或尝试添加)并收到如下错误:&lt;long package&gt;.SearchResultDto cannot be cast to &lt;long package&gt;.SearchResultDto

标签: java json data-binding jackson


【解决方案1】:

长话短说:我搞砸了我的类路径,并且有两个类加载器,REST 方法的实现称为来自数据库模块的存储库,它从不同的类加载器获取实例。在调整了我的 Maven 范围和导入类型后,它现在可以工作了!

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,问题是我的一个 POJO 是final。删除 final 关键字就成功了。

    public final class AccessControlMap extends HashMap<Permission, Set<AccessType>>
    
    //Before
    public final class AccessType {
    
    //After
    public class AccessType {
    

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 2017-05-05
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2021-09-18
      • 1970-01-01
      相关资源
      最近更新 更多