jersey RESTFUL服务 初步总结

来源:互联网 发布:网络传播是指 编辑:程序博客网 时间:2024/06/06 00:35

      因为解决一个jersey框架的问题,了解了jersey,现在总结一下jersey整合spring的使用:

       首先要引用的jar:

       <!-- 整合spring -->

        <dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>${jersey.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>


<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
</dependency>

<!-- jersey提供的客户端包,封装了一些客户端操作的类 -->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>${jersey.version}</version>
</dependency>

<!-- jersey的核心,服务端必备包 -->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>

<!-- 定义了jersry支持的常用的数据格式,json,xml都包括其中 -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>${jersey.version}</version>
</dependency>

<!-- 文件上传插件 -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>${jersey.version}</version>
</dependency>

<!-- 自用json插件非必要 -->

      <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.2</version>
</dependency>


web.xml


<servlet>

 <!-- jersey容器,本质是一个servlet -->
    <servlet-name>rest</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>

<!-- 总控制器类名,自己定义 -->
      <param-name>javax.ws.rs.Application</param-name>

      <param-value>com.test.MycontrollerApplication </param-value>
    </init-param>

 <!-- 文件上传 -->
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

  <servlet-mapping>
    <servlet-name>rest</servlet-name>
    <url-pattern>/oauth/2.0/*</url-pattern>
  </servlet-mapping>

核心控制器类

@ApplicationPath("oauth/2.0")
public class MyApplication extends ResourceConfig {

public MyApplication() {

super();

        
super.register(MyController.class);
//注册JSON转换器
super.register(JacksonJsonProvider.class);

LogUtil.info("oAuth 2.0 Restful APIs started.");
}
}

我的controller



@Path("/user")
@Component
public class UserInfoResources  extends BaseResources {
 
//get方式
@GET
@Path("/getUserInfo")
@Produces(MIME_JSON)
@Consumes(MIME_JSON)
public Response getRepairFactory(@QueryParam("id") int id) {
       
}
//post方式
@POST
@Path("/UpdateUserInfo")
@Consumes(MIME_JSON)
@Produces(MIME_JSON)
public Response updateUser(@RequestBody User user){

}

//文件上传
@POST
    @Path("/userImage")
    @Consumes(MediaType.MULTIPART_FORM_DATA + ";charset=utf-8")
    public Response uploadImage(
        @FormDataParam("file") InputStream uploadedInputStream,
            @FormDataParam("file") FormDataContentDisposition fileDetail,
@FormDataParam("userId") String userId,
            @FormDataParam("userName") String userName){

}

}


爬坑记:

 搞文件上传的时候,用的jersey+spring ,加了@FormDataParam注解注解之后就报下面的错误,找了好久发现web.xml里没有配置这个属性:

 <servlet>
    <servlet-name>rest</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.insuranceservices.oauth.OAuthApiApplication</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>



org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[WARNING] The (sub)resource method accessToken in com.insuranceservices.oauth.webapi.AccessTokenResources contains empty path annotation.; source='public javax.ws.rs.core.Response com.insuranceservices.oauth.webapi.AccessTokenResources.accessToken(javax.ws.rs.core.MultivaluedMap)', [WARNING] The (sub)resource method authorize in com.insuranceservices.oauth.webapi.PassWordAuthorizeResources contains empty path annotation.; source='public javax.ws.rs.core.Response com.insuranceservices.oauth.webapi.PassWordAuthorizeResources.authorize(javax.ws.rs.core.MultivaluedMap)', [WARNING] The (sub)resource method authorize in com.insuranceservices.oauth.webapi.RefreshTokenResources contains empty path annotation.; source='public javax.ws.rs.core.Response com.insuranceservices.oauth.webapi.RefreshTokenResources.authorize(javax.ws.rs.core.MultivaluedMap)', [WARNING] The (sub)resource method authorize in com.insuranceservices.oauth.webapi.CodeAuthorizeResources contains empty path annotation.; source='public javax.ws.rs.core.Response com.insuranceservices.oauth.webapi.CodeAuthorizeResources.authorize()', [WARNING] The (sub)resource method getUserResources in com.insuranceservices.oauth.webapi.UserResources contains empty path annotation.; source='public javax.ws.rs.core.Response com.insuranceservices.oauth.webapi.UserResources.getUserResources()', [FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response com.insuranceservices.oauth.webapi.UserResources.updateUserImage(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class com.insuranceservices.oauth.webapi.UserResources, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@3a5d7ce4]}, definitionMethod=public javax.ws.rs.core.Response com.insuranceservices.oauth.webapi.UserResources.updateUserImage(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition), parameters=[Parameter [type=class java.io.InputStream, source=file, defaultValue=null], Parameter [type=class org.glassfish.jersey.media.multipart.FormDataContentDisposition, source=file, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}']
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:528)
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:166)
at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:327)
at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:324)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:338)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:171)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:363)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1238)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1151)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1038)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4997)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5289)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)