【问题标题】:fetch fewer columns in REST JSON response在 REST JSON 响应中获取更少的列
【发布时间】:2016-12-15 09:58:55
【问题描述】:

我是 REST Web 服务开发的新手。目前,我们正在使用 Spring Boot、Spring JPA 进行服务的开发。我在返回 REST 响应中的选择性列时遇到了困难。我的问题如下:

我有一个包含 10 行下面列的用户表

  1. 身份证
  2. 姓名
  3. 年龄
  4. 城市
  5. 手机号码

我的用户实体对象是:

@Entity
@Table(name="user")
public class User
{

@Id
@GeneratedValue(generator="ID", strategy=GenerationType.SEQUENCE)
private long id;

@Column(name="Name")
private string name;

@Column(name="age")
private int age;

@Column(name="city")
private string city;

@Column(name="mobile number")
private string mobileNumber;
.
.
.
getter and setters
.
.
.}

我有以下两个开发要求:

  1. 返回所有行和所有列
  2. 返回只有三列的所有行(ID、姓名和手机号码)

对于第一个要求,我能够通过使用 JPA 的 findAll() 使其工作

对于第二个要求,我尝试使用如下自定义查询:

@Query("select New com.org.user(u.id, u.name, u.mobileNumber) from user u")
public List<user> getList()

这样,我的 Json 响应如下所示,其他两个字段(城市和年龄)具有默认值,但表中没有实际值。

[
{
"id": 1,
"name":"Rocky"
"age":0,
"city":null,
"mobileNumber": "9080980909"
},
{
"id": 2,
"name":"Stella"
"age":0,
"city":null,
"mobileNumber": "8909012239"
}
.
.
.
.
{
"id": 10,
"name":"Una"
"age":0,
"city":null,
"mobileNumber": "78976887989"
}
]

但我需要像下面这样只包含三个字段的响应

[
{
"id": 1,
"name":"Rocky",
"mobileNumber": "9080980909"
},
{
"id": 2,
"name":"Stella",
"mobileNumber": "8909012239"
},
.
.
.
{
"id": 10,
"name":"Una",
"mobileNumber": "78976887989"
}
]

有人可以帮助我如何获得上述回复吗?

【问题讨论】:

  • 嗨 Alan,除了为我们需要的每个自定义响应创建 POJO,还有其他方法吗?
  • 是的,按照建议使用 JsonView 或配置您的序列化程序以忽略空值,例如杰克逊:stackoverflow.com/questions/11757487/…。对于不可为空的原语 boolean、integer 等,请在 Pojo 中使用可空包装类型 Boolean、Integer 等。

标签: json rest spring-boot spring-data-jpa


【解决方案1】:

在您的实体上使用 @JsonInclude(Include.NON_NULL) 注释。它将排除您的 json 响应中的所有空字段。但是,您必须将“年龄”从 int 更改为 Integer 数据类型,以使其可以为空。

@Entity
@Table(name="user")
@JsonInclude(Include.NON_NULL)
public class User
{

@Id
@GeneratedValue(generator="ID", strategy=GenerationType.SEQUENCE)
private long id;

@Column(name="Name")
private String name;

@Column(name="age")
private Integer age;

@Column(name="city")
private String city;

@Column(name="mobile number")
private String mobileNumber;
.
.
.
getter and setters
.
.
.}

【讨论】:

  • 如果我有一个布尔字段,@JsonInclude(Include.NON_NULL) 工作吗?
  • 将数据类型更改为布尔值,如果您希望它们可以为空,请不要使用原始数据类型。
猜你喜欢
  • 2021-05-10
  • 2016-03-14
  • 2017-01-21
  • 2021-10-27
  • 1970-01-01
  • 2022-11-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多