当前位置: 首页 > 知识库问答 >
问题:

在jax-rs中提取请求参数时出现错误请求错误(400)或未找到错误(404)

蓟和煦
2023-03-14

如果URI路径模板变量不能转换为指定的类型,JAX-RS运行时将向客户端返回HTTP 400(“Bad Request”)错误。如果@PathParam注释不能强制转换为指定的类型,JAX-RS运行时将向客户端返回HTTP 404(“未找到”)错误。

有人能解释一下区别吗,也许举个例子?

共有1个答案

洪飞白
2023-03-14

我不知道为什么,但是如果您用path param定义方法,但它在将字符串强制转换为自定义类型时失败,jax-rs(在我的例子中是jersey servlet)返回404错误,这是非常奇怪和意外的。

package com.example.jaxrs.api;
...
    @GET
    @Path("/{id}/info")
    public Response info(@PathParam UUID id) { ... }

curl-x获取http://127.0.0.1:8080/api/123/info-->HTTP错误404未找到

这种行为是可以改变的。只需创建简单的ExceptionMapper,捕获ParamException,并返回正确的“400 Bad Request”响应。

package com.example.jaxrs.errors;

@Provider
public class PathParamExceptionMapper implements ExceptionMapper<ParamException> {
  @Override
  public Response toResponse(ParamException exception) {
    return Response.status(Response.Status.BAD_REQUEST).build();
  }
}
<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.example.jaxrs.api;com.example.jaxrs.errors</param-value>
    </init-param>
</servlet>
 类似资料:
  • 我正在使用实现一个联系人应用程序。现在,我正试图通过发送以下格式的put请求来更新联系人 我将XML作为字符串发送,作为请求的主体。这是我的xmlString(请求主体) 我写了下面的代码来发送更新联系人的PUT请求。 当我试图在中发送请求时,联系人更新成功。但是当我试图运行上面的程序时,我得到了 400错误请求错误 我不知道我哪里出错了。任何帮助都将不胜感激!

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 我正在为一个项目使用Hackerrank API。查看官方文档,点击这里! 在他们的网站上有一个使用UNIREST的例子, 由于我使用的是axios,所以我将其转换为类似的axios代码,如下所示: 我希望这只适用于示例中所示的示例,但它给我带来了以下错误: 请求失败,状态代码为400 错误:请求失败,状态代码为400 在createError(createError.js:16) 在sett(s

  • 我在InteliJ/Java/RestAssured中收到一个400错误的POST请求,但在Postman中没有,所以谁能告诉我哪里出错了,请先告诉Postman 我的身体参数是 现在,当我发布这篇文章时,我得到了200条回复和一个不错的新访问令牌。当我在Java/RestAssured中尝试同样的方法时,我得到一个400错误的请求错误,这就是我发布的内容。 身体 每次运行这个程序,我都会收到HT

  • 我正在尝试搜索亚马逊的产品广告,并使用botlenose来帮助我做到这一点。但是,我刚刚收到HTTP错误400。 其他一些重要信息: 我来自巴西,我的标签也来自亚马逊。这是个问题吗? 我确实检查了我的钥匙、秘密和标签,一切正常。我确实在StackOverflow上查看了其他一些问题,但对我来说没有任何效果。 当然,出于安全原因,我更改了密钥。 Traceback(最近一次调用最后一次):File"