You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

REST电影API按名称搜索的路径定义及PathParam解析错误问题

问题分析与解决方法

你这里踩了JAX-RS里路径参数和查询参数的常见坑啦!问题出在**@Path注解的用法和参数获取注解的选择**上:

错误原因

@Path注解只负责定义URL的路径部分,不能包含?以及后面的查询参数(比如?text=name这种写法是完全错误的)。而且你想用@PathParam获取查询参数,这也是不对的——@PathParam是用来抓取路径里的变量(比如/movies/{id}里的id),而URL中?后的参数属于查询参数,得用@QueryParam来获取。

修正后的代码

把你的代码改成这样就可以正常工作了:

@GET
@Path("/search")
@Produces(MediaType.APPLICATION_JSON)
public Response getMovieByName(@Context HttpServletRequest req, @QueryParam("text") String name) {
    if (!checkLoggedIn(req)) {
        throw new WebApplicationException("User not logged.");
    }
    return buildResponse(movieService.getMovieByName(name));
}

关键修改点说明

  • 把@Path里的/search?text=name改成了/search:这才是正确的路径定义,查询参数不需要写在@Path里
  • 把@PathParam("name")换成了@QueryParam("text"):因为你的前端请求应该是GET /search?text=要搜索的电影名,这里的text是查询参数的键,@QueryParam要和它对应。如果想让前端用?name=xxx传参,那把@QueryParam("text")改成@QueryParam("name")就行
  • (可选)如果希望搜索参数是可选的,可以给@QueryParam加默认值:
    @QueryParam("text") @DefaultValue("") String name
    

这样修改后,当前端发送GET /search?text=星际穿越的请求时,name变量就会被正确赋值为星际穿越,然后传给你的movieService处理啦。

内容的提问来源于stack exchange,提问作者Arnau Van Boschken ArnauB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:41:24