私はWildflyでRESTサービスを実行していて、304 Not Modified
応答を生成するためにRequest.evaluatePreconditions
メソッドを使用しようとしています。javax要求オブジェクトがIf-None-Matchヘッダーの前提条件を評価していない
Iは、要求のIf-None-Match
ヘッダにETag値を渡していたが、EntityTagはIf-None-Match
ヘッダの値と一致した場合であってもevaluatePreconditions
方法は304
応答を生成していません。
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.inject.Inject;
import javax.persistence.PersistenceException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.EntityTag
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import com.mycompany.DataClient;
import com.mycompany.ResponseData;
@Path ("entities")
@Stateless
@TransactionManagement (TransactionManagementType.BEAN)
public class RESTService
{
@Inject
private DataClient m_DataClient;
@GET
@Produces (MediaType.APPLICATION_JSON)
public Response findAllEntities (@Context Request request)
{
Response.ResponseBuilder response = null;
try
{
ResponseData responseData = m_DataClient.findAll();
EntityTag tag = new EntityTag (responseData.getETag());
response = request.evaluatePreconditions (tag);
if (response == null)
{
response = Response.status (responseData.getStatusCode()).entity (responseData.getEntities()).tag (responseData.getETag());
}
}
catch (IllegalStateException | PersistenceException | InterruptedException | ExecutionException ex)
{
m_Logger.log (Level.SEVERE, "Find All Data Exception", ex);
response = Response.serverError();
}
return response.build();
}
}
- HTTPステータスコードに対応
int
を返しResponseData.getStatusCode()
:ここコードです。
ResponseData.getEntities()
は、シリアル化可能オブジェクトのList
を返します。ResponseData.getETag()
は、getEntities
によって返されたエンティティオブジェクトに対応するハッシュを含むString
を返します。
ここでは、サーバーへの私の要求です:
curl -H "Accept:application/json" -H "If-None-Match:7056166173985" -H "Authorization:Bearer adsf" -k -v https://mycompany.com/entities
ここでは、サーバからのレスポンスヘッダーです:
< HTTP/1.1 200 OK
< ETag: "7056166173985"
< X-Powered-By: caffeine
< Access-Control-Allow-Credentials: true
< Content-Type: application/json
< Content-Length: 1227
< Date: Fri, 27 Oct 2017 02:00:39 GMT
< Via: 1.1 google
< Alt-Svc: clear
<
あなたが見ることができるように、応答ヘッダー内のETag値が値と一致しましたIf-None-Match
リクエストヘッダーにあります。 304 Not Modified
の返信が届かないのはなぜですか?