我只想对 JPA 实体的特定字符串类型字段进行自定义序列化。例如,名为 User
的实体类上名为 details
的字段。序列化逻辑需要访问其他一些 Spring bean,因此应将这些 bean 注入(inject)其中。
此 JPA 对象可能是序列化的根或要序列化的另一个实体的成员。
所以我认为我不能使用com.fasterxml.jackson.databind.annotation.JsonSerialize
。如果我为 String
类型定义一个 org.springframework.boot.jackson.JsonComponent
,它将为所有 String
字段调用,并且可能会对序列化性能/吞吐量产生潜在的负面影响。
这个问题有解决办法吗?
最佳答案
这是一个String
字段的自定义序列化器。在这个简单的例子中,它只是将其变为小写
class DetailsSerializer extends StdSerializer<String> {
public DetailsSerializer() { this(null); }
public DetailsSerializer(Class<String> t) { super(t); }
@Override
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeString(value.toLowerCase());
}
}
重要的一点是注释特定字段,以便该序列化器仅用于该字段。例如
class User {
@JsonSerialize(using = DetailsSerializer.class)
private final String details;
// other fields getters etc.
}
关于java - 有没有一种方法可以在 Spring Boot 应用程序中自定义 JPA 实体的仅一个特定 String 类型字段的序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612685/