2017-10-07 34 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(); 
} 
相關問題