操作 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的主要内容,如果未能解决你的问题,请参考以下文章

RESTFUL设计风格

RESTful API 设计:url 参数应该有默认值吗?

如何设计具有多个输入参数的 RESTful URL

Android - 将参数传递给 Android 应用程序中的 RESTful URL

Restful and 前后端分离

☀️☀️☀️换一个SpringMVC编写风格吧!快来看看 RESTFUL编写风格~