【发布时间】:2016-07-09 17:57:39
【问题描述】:
我正在编写一个 RESTful Web 服务。 我使用的技术:
- Eclipse EE Kepler IDE
- GlassFish 3(基于 Java 6)
- 球衣
- JDK v7
例如,当我使用 @DELETE 注释来注释 Java 方法时
我收到以下 HTTP 错误(通过 URI 调用):
HTTP Status 405 - Method Not Allowed
我想知道如何启用/禁用(以便启用/禁用上述 HTTP 错误)这些方法(PUT、HEAD 等)以及可以在哪个级别完成(Glassfish、Web.xml 等)。同样,您能否从 Web 浏览器的 URI、<form> 或独立客户端应用程序(非浏览器)调用所有这些资源方法(使用 HTTP 方法类型进行注释)?
例如,无论部署描述符上的以下配置行是否存在,都没有区别:
<security-constraint>
<web-resource-collection>
<web-resource-name>RESTfulServiceDrill</web-resource-name>
<url-pattern>/drill/rest/resource/*</url-pattern>
<http-method>DELETE</http-method>
</web-resource-collection>
当然,可以通过抛出异常(并将其映射到 HTTP 错误)作为指示来禁用特定的资源方法。例如,这将表明该实现不可用。
到目前为止,只有@GET和@POST(在<form>上)资源方法起作用,其他带注释的方法,例如@POST(通过URI),@PUT,@DELETE,@OPTIONS返回上面的HTTP错误。这就是我的问题需要解决的地方。为什么上面提到的资源方法会导致 HTTP 错误,而前两者没有?
资源方法示例:
@DELETE
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
@Path("/getDelete/{value}/{cat}")
public String getDelete(@PathParam("value") String value, @PathParam("cat") String cat){
return value+" : "+cat;
}
调用 URL:
<a href= "/RESTfulServiceDrill/rest/v6/exception/getDelete/Animal/cat">getDelete</a>
部署描述符是空的,除了上面几行 XML 代码。到目前为止,我通过使用注释使应用程序工作,没有 Web.xml(仅包含一些默认值,例如 index.jsp 文件)。
有什么想法吗?
【问题讨论】:
-
我不太明白你的问题。您的项目基本上在运行吗,即您的 REST 类的任何方法都有效吗?如果不是您的设置有问题,如果是,您应该以这种方法为例。如需更多帮助,请使用完整的
web.xml和示例代码更新问题。 -
对我来说,你的问题作为一个整体没有多大意义,因此我认为所有反对票的原因。
-
您能举例说明您的意思吗?你的问题很不清楚。您可以使用 Jersey 为 Java 中的适当路径指定 REST 方法。另外 - 在定义 DELETE 之前,您是否定义了对该路径的 GET?
-
你需要了解http方法。锚链接发出 GET 请求。如果要发送不同的方法请求,请使用不同的客户端。或者学习一些javascript
标签: rest jersey web.xml glassfish-3