在REST JSON响应中获取更少的列

时间:2016-08-09 11:21:38

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

我是REST webservices开发的新手。目前,我们正在使用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,名称和手机号码)的所有行
    3. 对于第一个要求,我能够通过使用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"
      }
      ]
      

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

1 个答案:

答案 0 :(得分:0)

在您的实体上使用@JsonInclude(Include.NON_NULL)注释。它将排除json响应中的所有空字段。但是,你必须改变&#34;年龄&#34;从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
.
.
.}