java - 有没有一种方法可以在 Spring Boot 应用程序中自定义 JPA 实体的仅一个特定 String 类型字段的序列化?

标签 java spring spring-mvc spring-boot jackson

我只想对 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/

相关文章:

javascript - 如何在从 jsp 调用的 javascript 函数中传递参数?

java - 如何理解异步 Web 服务客户端代码中 AsyncHandler 的这种使用,在 Java 中?

java - 将 Java 版本发送到文本文件

java - 是否可以弱引用 XML 布局中声明的 ImageView?

java - 如何使用@AutoConfigureMockMvc仅打印失败测试的请求?

spring - IntelliJ IDEA 在使用 Spring 的 @Autowired 注解时显示错误

java - Spring - 无法为返回 ByteArrayResource 的 API 发送错误消息

java - 使用 API 在 AWS Lambda 中设置环境变量

java - org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'org.springframework.security.filterChains' :

spring-mvc - SpringMVC 表单 :options items attribute: what exactly is it expecting?