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

时间:2013-12-17 17:40:42

标签: java jax-rs java-ee-6

在JAX-RS webservices的JavaEE文档中,我遇到了以下声明:

http://docs.oracle.com/javaee/6/tutorial/doc/gilik.html

  

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

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

因此,如果请求具有参数“username”,并且如果它不能被类型转换为String,那么我们得到400错误,然后我们将得到404错误?我是网络服务的新手,请帮助我理解这一点。

2 个答案:

答案 0 :(得分:1)

在这种情况下,URI用作资源定位器。这些规则符合HTTP specification的要求。

假设JAX-RS在URL http://host/app/{someInt}上公开单个端点匹配,并且{someInt}必须转换为整数。

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

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

答案 1 :(得分:1)

让我们说你有这样的事情:

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

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