nol*_*fra 6 java rest web-services glassfish jax-rs
我一直在尝试使用NetBeans Ide创建一个简单的Restful WebService.
我的Java EE版本是:Java EE 7 Web.
我创建了一个新的Java Web应用程序,设置此ContexPath : /DukesAgeService.
现在,运行我的应用程序,浏览器显示我的Index.html页面:
http://localhost:8080/DukesAgeService/
所以,一切正常.
然后,我尝试使用RESTful Web服务向导创建一个简单的restful资源.
所以,我创建了这个类:
package firstcup.webservice;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
/**
* REST Web Service
*
* @author nolanof
*/
@Path("dukesAge")
public class DukesAgeResource {
@Context
private UriInfo context;
/**
* Creates a new instance of DukesAgeResource
*/
public DukesAgeResource() {
}
/**
* Retrieves representation of an instance of firstcup.webservice.DukesAgeResource
* @return an instance of java.lang.String
*/
@GET
@Produces("text/plain")
public String getText() {
return "hello world";
}
}
Run Code Online (Sandbox Code Playgroud)
但是运行我的应用程序,在url:
http://localhost:8080/DukesAgeService/dukesAge
我得到一个404找不到的页面.
我发现任何带有url的传入get请求"/dukesAge"都是由DukesAgeResourceclass getText方法处理的.怎么了?
谢谢
您可能错过了JAX-RS应用程序servlet.您可以在其中定义它,web.xml或者如果您想要使用xml-less,则可以使用Application子类.IMO最简单的方法就是使用带Application注释的子类@ApplicationPath.将创建一个servlet,并将servlet路径设置为注释中的值.就像是
@ApplicationPath("/rest")
public class RestApplication extends Application {
// All request scoped resources and providers
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<>();
classes.add(DukesAgeResource.class);
return classes;
}
// all singleton resources and providers
@Override
public Set<Object> getSingletons() {
Set<Object> singletons = new HashSet<>();
return singletons;
}
}
Run Code Online (Sandbox Code Playgroud)
然后资源应该通过访问资源
http://localhost:8080/DukesAgeService/rest/dukesAge.
还有其他方法,但这是便携式的方式.Glassfish使用Jersey,但是在Netbeans中从头开始创建Java EE Web应用程序只会导入编译时Java EE标准类(没有Jersey依赖项).所以上面的确是你打赌的开始.
您可以在Jersey文档中查看其他部署选项.对于某些选项,您可能需要添加一些Jersey编译时依赖项.这就是我刚才提到的原因.不需要其他罐子.
另一个导致404的问题是,如果您将JAX-RS servlet路径指定为/*.这将与为html页面提供静态资源的默认servlet冲突.这就是我设置它的原因/rest.
UPDATE
在JAX-RS规范中还指出,如果在getClasses()和中返回空集getSingletons(),则应进行隐式包扫描.(提供者)@Provider默认情况下将注释的类作为单例添加,注释的资源类@Path将是每个请求对象(意味着每个请求创建一个新对象).所以你可以选择
@ApplicationPath("/rest")
public class RestApplication extends Application {
// Left empty
}
Run Code Online (Sandbox Code Playgroud)
它应该是一样的.
| 归档时间: |
|
| 查看次数: |
5742 次 |
| 最近记录: |