如何从表中获取一个列值?

时间:2017-04-20 14:21:57

标签: spring-boot spring-data

我使用Spring启动和Spring数据。

我有一个带有id和firstName列的联系人实体。

@Entity
@Table(name = "Contact")
public class Contact {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private int id;
    private String firstName;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }


}

我使用存储库和Spring Data来查找我的数据。

 public interface contactRepository extends CrudRepository<Contact, Long> {
    }

我的控制器,例如getAll:

@RequestMapping(value = "/getAllContact", produces = "application/json")
public List<Contact> getAllClients(){
    return repo.getAll();
}

我的控制器工作但我不知道如何返回控制器中firstName列中的所有值。我尝试了一个查询,它可以工作,但它只返回一个值列表而不是json:

@Query(value = "SELECT firstName FROM Contact" )
        List<Contact> findAllFirstName();

示例:

["Pierre", "Jean"]

我想要这个(在Json中):

[{"firstName ": "Pierre" },{"firstName ":"Jean"}]

我该怎么做?

2 个答案:

答案 0 :(得分:0)

确保jackson库位于类路径中。然后在控制器方法中添加@ResponseBody以返回json输出。还要在实体的id中添加@JsonIgnore,以将其从json输出中排除。

@RequestMapping(value = "/getAllContact", produces = "application/json")
@ResponseBody
public List<Contact> getAllClients(){
    return repo.getAll();
}

@Entity
@Table(name = "Contact")
public class Contact {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    @JsonIgnore
    private int id;
    private String firstName;

    .....
}

答案 1 :(得分:0)

使用Spring Data Rest中的投影和摘录支持。虽然添加JsonIgnore注释确实有效,但它不灵活,因为您只能在编译时忽略而不是运行时间。

http://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts