Java JAX-RS中的URI路径模板变量

Java JAX-RS中的URI路径模板变量,java,jax-rs,java-ee-6,Java,Jax Rs,Java Ee 6,在JAX-RS Web服务的JavaEE文档中,我遇到了以下语句: 如果无法将URI path模板变量强制转换为指定的 类型,JAX-RS运行时将向返回HTTP 400(“错误请求”)错误 客户。如果无法将@PathParam注释强制转换为 指定类型时,JAX-RS运行时返回HTTP 404(“未找到”) 向客户端发送错误消息 所以,若请求有参数“username”,若不能将其类型转换为字符串,那个么我们会得到400个错误,那个么什么时候我们会得到404个错误?我是web服务新手,请帮助我理解

在JAX-RS Web服务的JavaEE文档中,我遇到了以下语句:

如果无法将URI path模板变量强制转换为指定的 类型,JAX-RS运行时将向返回HTTP 400(“错误请求”)错误 客户。如果无法将@PathParam注释强制转换为 指定类型时,JAX-RS运行时返回HTTP 404(“未找到”) 向客户端发送错误消息


所以,若请求有参数“username”,若不能将其类型转换为字符串,那个么我们会得到400个错误,那个么什么时候我们会得到404个错误?我是web服务新手,请帮助我理解这一点。

在本例中,URI用作资源定位器。这些规则符合标准的要求

假设JAX-RS在URL
http://host/app/{someInt}
{someInt}
必须转换为整数

http://host/app
与此不匹配,因此返回404-未找到


http://host/app/foo
与模式匹配,但无法将
foo
解析为整数,因此它返回400-错误请求。

假设您有类似的情况:

@Path("/{userId}")
public class MyResourceBean {
    ...
    @GET
    public String printUsername(@PathParam("userId") int userId) {
        ...
    }
}

如果请求的URI类似于
/abc
,那么您将得到400,因为
abc
不能转换为
int
。现在,如果您的请求URI为“/”,您将得到404,因为没有与此URI关联的资源方法。

您的答案位于您在问题中提到的链接中。
@Path("/{userId}")
public class MyResourceBean {
    ...
    @GET
    public String printUsername(@PathParam("userId") int userId) {
        ...
    }
}