【问题标题】:SpringBoot concatenate search parameters browser urlSpringBoot连接搜索参数浏览器url
【发布时间】:2018-07-19 23:59:06
【问题描述】:

我开始使用 Spring Boot。我的目标是进行有限的搜索,从数据库中检索数据。我想在url的查询中添加多个参数。

到目前为止,我能够使用搜索:http://localhost:8080/wsr/search/ 来全面搜索数据库中的数据。但我想要的是在浏览器的 url 中添加参数的几个条件下分隔搜索,例如:

我发现的问题是我找不到处理多个条件的方法。我要做的唯一事情是:

我在网上冲浪,但没有针对这个确切问题的结果,信息太多但无法找到。

我的代码是:

@Entity
@Table(name = "person")
public class Person {

@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "name")
private String name;
@Column(name = "address")
private String address;
@Column(name = "country")
private String country;

public Value() {
}

public Value(int id, String name, String address, String country) {
    this.id = id;
    this.name = name;
    this.address = address;
    this.country = country;
}
//all getters and setters
}


public class Implementation {

@Autowired
private DataBase dataBase;

public List<Value> findById(@PathVariable final int id) {
    return dataBase.findById(id);
}

public List<Value> findByName(@PathVariable final String name) {
    return dataBase.findByName(name);
}

public List<Value> findByAddress(@PathVariable final String address) {
    return dataBase.findByAddress(address);
}

public List<Value> findByCountry(@PathVariable final String country) {
    return dataBase.findByCountry(country);
}

}


//@Component
@RepositoryRestResource(collectionResourceRel = "person", path = "data")
public interface DataBase extends JpaRepository<Value, Integer>{

public List<Value> findAll();

@RestResource(path = "ids", rel = "findById")
public List<Value> findById(@Param("id") int id) throws ServiceException;

@RestResource(path = "name", rel = "findByName")
public List<Value> findByName(@Param("name") String name) throws ServiceException;

@RestResource(path = "address", rel = "findByAddress")
public List<Value> findByAddress(@Param("address") String address) throws ServiceException;

@RestResource(path = "country", rel = "findByCountry")
public List<Value> findByCountry(@Param("country") String country) throws ServiceException;

}

希望您能帮助我正确地了解应该做或做错的事情。如果可能的话,一些代码也将受到高度赞赏。

最好的问候

【问题讨论】:

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


【解决方案1】:

您可以使用@RequestParam("nameParameter")annotation 来映射您想要的所有参数。假设你有这样的网址:

http://localhost:8080/data/search/person?name=Will&country=UK

那么你可以有一个类似的api:

...
@RequestMapping(value = "/person")
public String api(@RequestParam("name") String name, @RequestParam("country") String country)
...

【讨论】:

  • 在问题中根本没有控制器层。 OP 正在使用 spring-data-rest。这有什么帮助?
  • 对我来说,OP 似乎很困惑,我提出了解决问题的替代方案。
  • 在问题中根本没有控制器层是什么意思。OP 使用的是 spring-data-rest”,对不起,但不明白。我在这方面完全是新手,Spring Boot。建议是创建一个新方法,但我在这里发现的问题是无法知道用户在查询中将包含哪些参数。可能是: - person?name=Will&country=UK - person?name=Will&name=Angie 我希望所有条件都满足,不知道“姓名”参数或“姓名、地址、国家/地区”参数的数量,即它们的数量,或者是否全部都在查询中。
  • @Json 在这种情况下,您应该编写一个 Json (:D) 并将其作为主体在 post 请求中发送到服务器,服务器会将其映射到正确的对象中。
  • 哈哈,这是一个起点。我需要一个Json!谢谢,我会寻找如何构建它。此时我完全陷入困境,几天研究Spring Boot“配置”需要使用什么。你知道任何有用的例子,你有链接吗?我几乎要疯了。一个问题,我应该使用 POST 而不是 GET 请求,它是 Json 的强制性条件吗?
猜你喜欢
  • 2018-09-11
  • 2011-10-07
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多