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

标签 java rest jpa spring-boot

我有以下 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);见下文:

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

这将返回问题列表。

关于java - Spring Boot REST - 如何实现需要 Java 对象的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44246906/

相关文章:

java - 更换 Web 服务的最佳实践?

javascript - Parse.com RESTful 一对多请求,相关子项已填充

java - 无法使用 Hibernate JPA 更新嵌套实体

java - JPA 在持久化对象时丢失字段

java - 相关实体的 GreenDao getter 返回空列表

java - CDI。如何检查bean是否实例化?

java - 到处都找不到符号错误

java - 任何方式只忽略 "connection reset by peer"IOExceptions

rest - 由于暴力攻击而被锁定的用户的正确http状态是什么?

jpa - 无法将 eclipselink 与 spring boot 一起使用