繁体   English   中英

Spring Boot REST-如何实现需要Java对象的搜索?

[英]Spring Boot REST - How to implement a search that requires a Java object?

我有以下JPA模型:

问题

@Entity
public class Issue {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String title;
private String text;

@ManyToOne
@JoinColumn(name="user_id")
private User user;

public Issue() {}

public Issue(String title, String text) {
    this.title = title;
    this.text  = text;
}

public long getId() {
    return id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

@Override
public String toString() {
    return "Issue [id=" + id + ", title=" + title + ", text=" + text + ", user=" + user + "]";
}
}

用户

@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String username;
private String firstname;
private String lastname;

public User() {}

public User(String username) {
    this.username = username;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getFirstname() {
    return firstname;
}

public void setFirstname(String firstname) {
    this.firstname = firstname;
}

public String getLastname() {
    return lastname;
}

public void setLastname(String lastname) {
    this.lastname = lastname;
}

@Override
public String toString() {
    return "User [id=" + id + ", username=" + username + ", firstname=" + firstname + ", lastname=" + lastname
            + "]";
}
}

还有一个扩展PagingAndSortingRepository并包含方法List<Issue> findByUser(User user);的Issue存储库List<Issue> findByUser(User user); 见下文:

public interface IssueRepository extends PagingAndSortingRepository<Issue,Long> {
    List<Issue> findByUser(User user);
}

我正在尝试找到一种通过HTTP调用导航这些关系的方法,即如何调用findByUser(User user)并获取该用户的所有问题?

使用以下调用,我可以执行该特定查询:

GET http://localhost:8080/issues/search/findByUser

但是我不清楚作为用户应该提供什么? 是否将ID作为查询参数发送? 我是否构造一个对象并将其作为查询参数发送? 我只是用错误的方式建模吗?

我想返回一个JSON列表,其中包含该特定用户的所有问题。

在此先感谢您的帮助或指导。

将存储库更改为此解决了问题。 关键是根据用户的字段而不是用户本身进行查找。

public interface IssueRepository extends PagingAndSortingRepository<Issue,Long> {
    List<Issue> findByUserUsername(@Param("username") String username);
}

GET http://localhost:8080/issues/search/findByUserUsername?username=jerney

这将返回问题列表。

放置另一个只读列,如@Column(name =“ user_id”,insertable = false,updatable = false)private Long userId; 在Issue实体中,并使用findByUserId(Long userId)回购方法找到它,并将userId参数(即,路径变量)传递给控制器​​,以使用http调用进行此操作。

如果只需要一条记录,则可以使用简单的findOne(Long userId),因为它可能比按字符串字段查询要快

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM