【问题标题】:How to create a custom json object to columns value returned from my custom @Query如何为从我的自定义 @Query 返回的列值创建自定义 json 对象
【发布时间】:2019-06-05 23:42:33
【问题描述】:

我有一个对 My SQL 数据库的查询,我使用 Spring Boot 将其返回为 Json 格式。 我的问题是它只返回没有键的值,例如:

[
  [
    "kermit",
    6
  ]
]

我希望它像这样返回:

[
  [
    "name":"kermit",
     "count" :6
  ]
]

我尝试将 Jackson Annotation jar 文件添加到项目中,并在我的实体模型类中使用 @JsonProperty:

@Entity
@Table(name = "act_id_membership", schema = "activiti", catalog = "")
@IdClass(ActIdMembershipEntityPK.class)
public class ActIdMembershipEntity {

    @JsonProperty("name")
    private String userId;

    @JsonProperty("group")
    private String groupId;

    @Id
    @Column(name = "USER_ID_")
    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    @Id
    @Column(name = "GROUP_ID_")
    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ActIdMembershipEntity that = (ActIdMembershipEntity) o;
        return Objects.equals(userId, that.userId) &&
                Objects.equals(groupId, that.groupId);
    }

    @Override
    public int hashCode() {
        return Objects.hash(userId, groupId);
    }
}

但它仍然没有键返回。我现在应该怎么做?请帮我! 非常感谢!

【问题讨论】:

  • 您想要的输出格式不是有效的 JSON。
  • Map 有键值对,所以你可能需要返回一个 map 会被 jackson 自动序列化为 json,我猜你返回的是 arraylist
  • 是的,这是真的!我解决了。谢谢!

标签: spring-boot jackson


【解决方案1】:

首先,我同意那个评论 JSON 格式无效的人的观点。您可以在这里查看示例https://json.org/example.html

其次,您需要创建一个 JSON 对象,其中包含所需的字段,例如:

  public class UserStat es implements Serializable {

         private String name;
         private long count;

         public String getName() {
             return name;
         } 

         public void setName(String name) {
             this.name = name;
         } 

         public long getCount() {
             return count;
         } 

         public void setCount(long count) {
             this.count = count;
         } 
  }

在您的自定义查询中。基于您的回报看起来像这样:

  @Query("SELECT u.name, count(u) FROM User u")
   public List<UserStat> findUserStat() ;

【讨论】:

  • 我之前有一个对象 JSON 类,只需像你说的那样修复我的查询并完美运行。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2012-10-10
  • 2019-04-06
  • 2020-12-17
  • 1970-01-01
  • 2016-06-29
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多