我使用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"}]
我该怎么做?
答案 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