我有一个关于电影的 api。我想按"名称"搜索电影。我应该如何定义路径?路径参数错误。它说它无法解决它。
@GET
@Path("/search?text=name")
@Produces(MediaType.APPLICATION_JSON)
public Response getMovieByName(@Context HttpServletRequest req,
@PathParam("name") String name) {
if (!checkLoggedIn(req)) {
throw new WebApplicationException("User not logged.");
}
return buildResponse(movieService.getMovieByName(name));
}
这是查询参数,而不是路径参数。不应在路径中包含查询参数。当客户发送时,它们将交给您:
@Path("/search")
您需要更改的是用于将参数注入方法的注释(使用 @QueryParam
(:
public Response getMovieByName(@Context HttpServletRequest req,
@QueryParam("name") String name)
如果使用类似 /search/?name=moviename
的内容调用服务,则将在 name
参数中发送名称值
如果你使用带有注释的 spring 很容易
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RequestController {
@RequestMapping("/search")
public Movie search(@RequestParam(value="name", defaultValue="hello") String name) {
// search and return movie
}
}
请求控制器只是拦截请求并映射到正确的路径,如/search
、/add
。实现通常位于服务层。然后你可以很容易地注入它。
调用很简单
http://localhost:8080/search?name=XMan
欲了解更多信息