【发布时间】:2016-12-15 09:58:55
【问题描述】:
我是 REST Web 服务开发的新手。目前,我们正在使用 Spring Boot、Spring JPA 进行服务的开发。我在返回 REST 响应中的选择性列时遇到了困难。我的问题如下:
我有一个包含 10 行下面列的用户表
- 身份证
- 姓名
- 年龄
- 城市
- 手机号码
我的用户实体对象是:
@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
.
.
.}
我有以下两个开发要求:
- 返回所有行和所有列
- 返回只有三列的所有行(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"
}
]
有人可以帮助我如何获得上述回复吗?
【问题讨论】:
-
JsonView: spring.io/blog/2014/12/02/…
-
嗨 Alan,除了为我们需要的每个自定义响应创建 POJO,还有其他方法吗?
-
是的,按照建议使用 JsonView 或配置您的序列化程序以忽略空值,例如杰克逊:stackoverflow.com/questions/11757487/…。对于不可为空的原语 boolean、integer 等,请在 Pojo 中使用可空包装类型 Boolean、Integer 等。
标签: json rest spring-boot spring-data-jpa