jackson-databind"对象不是声明类"的实例。

时间:2017-02-14 17:42:44

标签: java json data-binding jackson

我一直在升级到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]-><long package>.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]-><long package>AtmSearchResultDto["location"])

我很无能,这里有什么不对?

修改

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我有一个类似的问题,我的问题是我的一个POJO 最终。删除最终关键字可以解决问题。

public final class AccessControlMap extends HashMap<Permission, Set<AccessType>>

//Before
public final class AccessType {

//After
public class AccessType {