在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错误?我是网络服务的新手,请帮助我理解这一点。
答案 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关联的资源方法。