操作 url 参数 Restful API
Posted
技术标签:
【中文标题】操作 url 参数 Restful API【英文标题】:Manipulate url parameters Restful API 【发布时间】:2018-06-17 15:01:52 【问题描述】:我只需要知道当有人使用参数调用我的 API 时如何操作 url 参数。
http://localhost:8100/apis/employee?firstName=john&lastName=Do
我想在我的 GET 方法中使用这些 firstName 和 lastName 参数,但我不知道如何提取它们。
@GET
@Produces(MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON)
public Response getEmployee()
//Just need to extract the parameters in here so I can use on the logic to return only the ones that meet the requirements.
任何帮助将不胜感激。我在 Java 上使用 SpringBootApplication
【问题讨论】:
你使用什么语言? 我在 Java 上使用 SpringBootApplication 对Java不太了解,也许this older answer能帮到你 【参考方案1】:根据您问题中显示的注释,您正在使用 JAX-RS(可能与 Jersey)。所以使用@QueryParam
:
@GET
@Produces( MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON )
public Response getEmployee(@QueryParam("firstName") String firstName,
@QueryParam("lastName") String lastName)
...
对于 Spring MVC(也提供 REST 功能),您想使用@RequestParam
:
@RequestMapping(method = RequestMethod.GET,
produces = MediaType.APPLICATION_XML_VALUE,
MediaType.APPLICATION_JSON_VALUE )
public Response getEmployee(@RequestParam("firstName") String firstName,
@RequestParam("lastName") String lastName)
...
JAX-RS(带有 Jersey)和 Spring MVC 都可以与 Spring Boot 一起使用。详情请见documentation。
有关 Spring MVC 和 JAX-RS 之间差异的详细信息,请参阅此answer。
【讨论】:
是的,这是正确的,我正在使用 JAX-RS。我有个问题。如果我想按 ID 拉取员工,我可以使用employeeRepository.findOne(),其中employeeRepository 是扩展PagingAndSortingRepository 的接口。如果我想根据名字或姓氏选择员工怎么办?我是否在 employeeRepository 接口上实现我的方法?我问只是因为我不想重新发明***:) @DoArNa 这超出了您当前问题的范围,因此您应该考虑提出一个新问题。但是,它类似于Employee findByFirstNameIgnoreCaseAndLastNameIgnoreCase(String firstName, String lastName)
。
它似乎无法识别“@QueryParam”上的名字和姓氏。我是否必须添加任何注释“@Path”或类似的东西?如果是这样,那会是什么样子?【参考方案2】:
@RequestParam
就是你要找的东西
public Response getEmployee(@RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName)
...
【讨论】:
OP 使用的是 Spring Boot,但@GET
和 @Produces
属于 JAX-RS(可以与 Spring 一起使用)。所以正确的注解是@QueryParam
而不是@RequestParam
。有关详细信息,请参阅我的answer。【参考方案3】:
您可以在控制器方法中使用@RequestParam
来访问查询参数。例如
public Response getEmployee(@RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName)
【讨论】:
OP 使用的是 Spring Boot,但@GET
和 @Produces
属于 JAX-RS(可以与 Spring 一起使用)。所以正确的注解是@QueryParam
而不是@RequestParam
。有关详细信息,请参阅我的answer。以上是关于操作 url 参数 Restful API的主要内容,如果未能解决你的问题,请参考以下文章