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();
}
}
ResponseData.getStatusCode()
는 HTTP 상태 코드에 해당하는int
반환 여기 는 코드입니다.ResponseData.getEntities()
은List
의 직렬화 가능 객체를 반환합니다.ResponseData.getETag()
은getEntities
이 반환 한 엔터티 개체에 해당하는 해시가 포함 된String
을 반환합니다. 당신이 볼 수 있듯이< 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 값이 값과 일치 : 서버에서 응답 헤더 여기
curl -H "Accept:application/json" -H "If-None-Match:7056166173985" -H "Authorization:Bearer adsf" -k -v https://mycompany.com/entities
것 :
다음은 서버 내 요청입니다 If-None-Match
요청 헤더 304 Not Modified
응답을받지 못하는 이유는 무엇입니까?