2017-10-07 36 views
-1

在同一时间将根资源类设为@Singleton并声明@QueryParam Annotation水平,为什么我们不能声明任何* Params Annotaion在类(RCC)级别,同时在Jax-RS中声明@Singleton

@Singleton 
@Path("/") 
public class MyResource{ 

    @QueryParam("q1") String q1; 

    @Path("/test") 
    public Response getQueryParam(){ 

     return Response.entity(q1).build; 
    } 
} 

我得到500错误代码例外低于申请时,请帮助我,如果任何人有原因此异常的知识。

SEVERE: StandardWrapper.Throwable 
com.sun.jersey.spi.inject.Errors$ErrorMessagesException 
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) 
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) 

回答

1

根据应用程序初始化为 单资源不能注入请求具体参数期间docsExample 3.24

将导致验证失败。如果查询参数将被注入到这样的单例的构造函数参数 相同的例子将失败。换句话说,如果你希望 一个资源实例服务于更多的请求(在同一时间),它不能绑定到特定的请求参数 。

由于QueryParam请求特定你不能@Singleton

@Context用它来救援!

众所周知,您可以注入其他类型的可以使用@Context注释注入的对象,代理对象用于这些;从而允许以单件使用:

@Context 
private UriInfo urinfo; 

private String queryparam; 

@GET 
@Produces(value = MediaType.APPLICATION_JSON) 
public Response bla(){ 

    MultivaluedMap<String, String> params = urinfo.getQueryParameters(true); 

    queryparam = params.containsKey("yourparam") ? 
          params.get("yourparam").get(0) 
          : "not in request"; 

    return Response.ok(queryparam).build(); 
} 
相关问题