我一直在我自己的小项目中使用json协议的jackson实现,现在它已经好了一段时间,直到我决定(第一次)序列化无状态对象。
我知道这可能听起来很奇怪,为什么我要发送无状态对象?我序列化的是对服务器的请求,这个特定的请求不包含任何字段,只是服务器端指令的代码。我的模型可以采用任何ClientRequest实现并调用它的perform()方法。即使请求没有字段,我希望它能够正常工作。
代码如下所示:
public class GetWallInputsRequest implements ClientRequest<List<WallInput>>
{
@JsonCreator public GetWallInputsRequest()
{
}
@Override public ServerResponse<List<WallInput>> perform()
{
return new WallMessageResponse( Wall.WALL.getInputs() );
}
}
我得到JsonMappingException:找不到类GetWallInputsRequest的序列化程序。 谷歌没有帮助我,这让我想知道我是不是只是愚蠢。可悲的是,我没有看到出路。
我经过许多蛮力尝试不同的事情后解决了这个问题。通过解决它,我的意思是没有想出来,但让它工作。添加以下行:
@JsonAutoDetect(getterVisibility=JsonAutoDetect.Visibility.NONE)
在类声明之上似乎可以解决。为什么这是必要的我不知道,但现在它发送一个空的json字符串而不是崩溃。
答案 0 :(得分:0)
文档说
表示没有自动检测访问修饰符的值:这可用于显式禁用指定类型的自动检测。
由于你的课程没有任何明确的记号来告诉杰克逊有一个字段或方法来序列化,它确定没有什么可以寻找。如果没有这个,我认为,正如所引用的文档中所建议的那样,它会期望某些东西。