0

JSON バインディングを使用する GET サービスに CacheControl 情報を追加したいと考えています。応答に cacheControl を追加すると、REST サービスは次のように聞こえることがわかりました。

@GET
@Path("cacheheadertest")
@Produces({"*/*"})
def testcache():javax.ws.rs.core.Response {
    val rb:Response.ResponseBuilder = javax.ws.rs.core.Response.ok("chached test message")
    val cc = new CacheControl()
    cc.setMaxAge(60)
    cc.setNoCache(false)
    rb.cacheControl(cc).build()

}

しかし、jsonメッセージを生成するRESTサービスがあり、jerseyライブラリはjavaオブジェクトをjavaからxml/jsonに自動的に変換します。

@GET
@Path("jsontestcache")
@Produces(Array(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML))
def myjsontestservice(@HeaderParam("X-TOKENID") tokenId: String,
@QueryParam("clientId") clientId: String):com.test.MyResultClass = {
 val response= new com.test.MyResultClass
 [...]

 response
}

myjsontestservice サービスの応答にキャッシュ コントロールを追加するにはどうすればよいですか? jersey によって応答が作成されたら、フィルタを使用してキャッシュ コントロールを追加する必要がありますか? ありがとう百万フラビオ

4

1 に答える 1

2

Response オブジェクトを返す必要があります。

def somejson() : Response = {
  val builder = Response.ok(new com.test.MyResultClass);
  val cc = new CacheControl()
  cc.setMaxAge(60)
  cc.setNoCache(false)
  builder.cacheControl(cc).build()
}

Jersey のインターセプターは、クラスを自動的に JSON オブジェクトに変換します。

于 2011-01-26T16:59:16.540 に答える