【发布时间】:2021-05-14 08:55:03
【问题描述】:
我正在使用application/json Content-Type(服务器)开发一个 REST 应用程序。我也在为它开发 REST 客户端库(客户端)。服务器和客户端都使用相同的 Jackson 注释类/资源。
我的一个服务器用例包括添加一个应该是只写的字段(仅启用反序列化)。我是这样做的:
public class MyClass {
@JsonProperty(access = WRITE_ONLY)
private String field;
...
}
但是,由于该类也用于客户端,因此我无法将值发送到该字段,因为序列化处理会跳过它。我希望客户端能够序列化这个字段。服务器和客户端使用不同的对象映射器。
我可以使用JsonSerializer<MyClass> 的单独实现并将其设置为对象映射器,但这意味着我必须手动序列化所有其他字段。我不想要这个。
我想知道,是否有某种方法可以指示对象映射器(或向其中注入一些东西)以不同方式处理此类字段?
【问题讨论】:
-
您可以尝试使用像
@Server这样的自定义注释并实现这个stackoverflow.com/questions/43342097/… 服务器和客户端之间的共享模块可以有像getServerObjectMapper()和getClientObjectMapper()这样的方法,这将添加这个序列化程序或不是相应的。 -
感谢您的回答,但我不知道这是否适合我的情况。在示例中,
@JsonSerialize(using = UnitSerializer.class)用于字段。所以它会在运行时自动解析。以编程方式,我只能为每种类型添加序列化程序。另外,如果可能的话,我现在不想介绍共享模块 -
仅在getter方法上使用@JsonIgnore,在链接link中回答
-
@NasirHussain,它在服务器端工作时。但是,在客户端,当我发送此字段时,杰克逊会忽略它。
标签: java json serialization jackson mixins