我希望 Spring Boot Java @Entity 模型类中的 String 成员变量之一在发送到客户端时显示为实际的 JSON 对象

Posted

技术标签:

【中文标题】我希望 Spring Boot Java @Entity 模型类中的 String 成员变量之一在发送到客户端时显示为实际的 JSON 对象【英文标题】:I want one of the String member variables in my Spring Boot Java @Entity model class to show up as an actual JSON object when sent to the client side 【发布时间】:2018-12-08 02:55:54 【问题描述】:

,但我不确定这怎么可能

我在 Spring Boot 中有这个 @Entity 类:

@Entity
@Data
public class A 

    @JsonProperty
    private String value

A 类中的那个“值”应该是一个 JSON 对象,但我必须将它保存为字符串类型,否则它不会被 JPA 保存到数据库中。

当控制器将此模型对象返回给客户端时,JSON 字符串中的“值”将显示为完整的字符串,而不是 JSON 结构。

出现了


  "value": "\"another_value\":\"1234\""

而不是


  "value": "another_value":"1234"

是否有一些简单的方法可以在我的 A 类中注释“值”来解决这个问题?

谢谢

【问题讨论】:

如何为getValue() 定义一个自定义@JsonGetter 而不是使用Lombok 生成的那个。在那个 getter 中,不是返回 String,而是通过使用 new ObjectMapper().readTree(value); 解析 JSON 字符串来返回 JsonNode。好像这样可行? 是的 @nickb ,使用 JsonGetter 确实有效,非常感谢 很高兴听到这个消息。不知道为什么有人会在一小时后提出与使用 GSON 的答案完全相同的建议。 【参考方案1】:

您必须提供一个自定义 Getter,以便在反序列化时对其进行转换。我正在使用 google gson 进行反序列化。

@Entity
@Data
public class A 

    @JsonProperty
    private String value;

    @JsonGetter("value")
    public HashMap getValueAsJson()
        return new Gson().fromJson(value, HashMap.class);
    

【讨论】:

以上是关于我希望 Spring Boot Java @Entity 模型类中的 String 成员变量之一在发送到客户端时显示为实际的 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot 无法启动 HSQLDB

spring boot:如何配置自动装配的 WebTestClient

Elasticsearch:从 Spring Boot 应用中连接 Elasticsearch

Spring Boot Batch ResourcelessTransactionManager DataSourceProperties$DataSourceBeanCreationExceptio

Spring Boot Batch ResourcelessTransactionManager DataSourceProperties$DataSourceBeanCreationExceptio

目前在将作品升级到《深入浅出Spring Boot 3.x》,希望大家多多支持。