public class MyClass {
@JsonProperty(access = WRITE_ONLY)
private String field;
...
}
我想知道,是否有某种方法来指示对象映射器(或注入一些东西到它)以不同的方式处理这样的字段?
当您在客户端和服务器端使用通用模型类时,您可以使用com.fasterxml.jackson.databind.module
类及其实现注册所有差异。如果某些jackson
配置只能在一侧可用,您可以将其移动到MixIn类/接口,并仅在给定的一侧注册。
简单示例:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.IOException;
public class ClientServerApp {
public static void main(String[] args) throws IOException {
// Client side
ObjectMapper clientMapper = JsonMapper.builder().build();
// create payload on client side
MyClass instance = new MyClass(1, "fieldValue");
String payload = clientMapper.writeValueAsString(instance);
// send to server
System.out.println("Send: " + payload);
// ..
// Server side
ObjectMapper serverMapper = JsonMapper.builder()
.addModule(new ServerModule())
.build();
MyClass deserialized = serverMapper.readValue(payload, MyClass.class);
System.out.println("Deserialized: " + deserialized);
System.out.println("Payload on server side: " + serverMapper.writeValueAsString(deserialized));
}
}
class ServerModule extends SimpleModule {
public ServerModule() {
setMixInAnnotation(MyClass.class, MyClassServerMixIn.class);
// add other configuration
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class MyClass {
private int id;
private String field;
}
interface MyClassServerMixIn {
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
String getField();
}
上面的代码打印:
Send: {"id":1,"field":"fieldValue"}
Deserialized: MyClass(id=1, field=fieldValue)
Payload on server side: {"id":1}
假设我有这样的json,我想将其反序列化为一个名为SubscriberProfile的对象。 当我使用以下代码时,它可以正常工作, 但如果json中缺少字段2,我希望objectmapper抛出和异常(可能缺少字段1和字段2)。 所以这样的json应该抛出一个异常 我曾尝试使用注释,但仅在序列化它时有效。 你知道我该怎么解决这个问题吗? 提前感谢
问题内容: 的功能需要Class。但是,如果我内部传递的类将某些接口作为数据成员,该如何使用它。 尽管我可以理解此异常的原因,因为杰克逊没有获得所传递类的内部接口的具体类,但我的问题是如何解决它?那我该如何反序列化呢?我要反序列化的类是: 这是一个接口,所以这给了我以下错误:- 问题答案: 杰克逊显然不能构造对象,因为它是一个接口。您将需要在json和ObjectMapper中具有其他信息,以告诉
我想使用对象映射器序列化不同类型的列表,但我不知道如何一次将不同类型的列表对象传递到对象映射器中。以下是我的代码: 你能建议我应该通过什么吗?在上面的代码中。这是因为我必须将jackson序列化的字符串作为jsp中的一个字符串包括上面的列表,并解析该字符串以获得在客户端使用的单个列表。
如何告诉 Jackson ObjectMapper 从序列化中忽略特定类型(类)的字段的情况下)? 约束条件: 不控制源类-它是第三方类。 被序列化的类类型是未知的-我猜它取消了MixIn的资格。 此类字段的名称预先未知 为了提供帮助,下面是一个单元测试,期望从序列化中忽略字段和,但它的方法是不正确的,它是按名称而不是按类型过滤它们。
问题内容: 我知道如何序列化整个表格,如下面的示例或表格的一个特定字段,只需更改以下行即可: 至 。 但是我想序列化具有ID的2个输入字段....该怎么做? 问题答案: 方法1: 通过逗号分隔的选择器,可以使用以下代码将两个字段序列化 方式2: 使用jQuery serialize()函数时,它只是将您的字段转换为a = 1格式的字符串。因此,您当然可以将此函数应用于两个字段,并将结果连接起来,并
我正在努力用本地化反序列化世界天气在线API结果。 是否有更好、更简单的解决方案,只为lang对象编写一个自定义反序列化器,并允许GSON自动反序列化其余数据?