Tôi đang cố gắng xử lý yêu cầu không có tiêu đề Accept
theo cách cụ thể, nhưng Jersey có vẻ như bị bẻ cong khi điền vào một tài khoản, bất kể tôi làm gì, vì vậy nó luôn giống như yêu cầu có tiêu đề Accept
, ngay cả khi nó không.Làm thế nào để Jersey Test/Client không điền vào tiêu đề Chấp nhận mặc định?
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import static org.junit.Assert.assertEquals;
public class JerseyTestTest extends JerseyTest {
@Path("hello")
public static class HelloResource {
@GET
public String getHello(@Context HttpHeaders httpHeaders) {
String acceptHeader = httpHeaders.getHeaderString(HttpHeaders.ACCEPT);
return acceptHeader != null ? acceptHeader : "No Accept Header";
}
}
@Override
protected Application configure() {
return new ResourceConfig(HelloResource.class);
}
@Test
public void test() {
final String hello = target("hello").request()
.header(HttpHeaders.ACCEPT, null) // null means remove header
.get(String.class);
assertEquals("No Accept Header", hello);
}
}
kiểm tra này kết quả trong:
org.junit.ComparisonFailure:
Expected :No Accept Header
Actual :text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Bằng cách nào đó có một mặc định Accept
tiêu đề của text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
đó được thiết lập ở đâu đó. Nó không phải là tài liệu, và tôi rất thích tìm hiểu làm thế nào để vô hiệu hóa nó. Tôi đã xem xét qua nguồn Jersey, nhưng dường như không thể xác định vị trí của điều này đang xảy ra hoặc tại sao.
Cập nhật: khi tôi sử dụng curl để đạt điểm cuối mà không có tiêu đề Chấp nhận, không có tiêu đề Chấp nhận được tạo ra, do đó, vấn đề nằm trong Jersey Client hoặc môi trường Jersey Test, bằng cách nào đó.
Cập nhật 2: Lỗi này thể hiện khi sử dụng thùng chứa thử nghiệm Grizzly2 mặc định hoặc vùng chứa thử JDK, nhưng KHÔNG có trong vùng chứa thử nghiệm trong bộ nhớ.
Nó có thể được đặt tại thời điểm UserAgent được tạo cho yêu cầu. Có một cái nhìn sâu sắc về nó https://tools.ietf.org/html/rfc7231#section-5.3.2. Ngoài ra để giải quyết ở trên, bạn có thể thử và ghi đè lên tiêu đề Chấp nhận với giá trị rỗng/trống trong lớp Tài nguyên của bạn không? – nullpointer
@nullpointer Tôi tìm thấy mã ở Jersey có thêm User-Agent cho các yêu cầu và tôi không thấy bất kỳ mã nào gần đó thêm tiêu đề Chấp nhận, vì vậy không, đó không phải là khi được thêm. Tôi biết chính xác tiêu đề Accept là gì, và tôi đã đọc RFC và tham khảo chúng rất nhiều. Tôi không có ý tưởng những gì bạn có ý nghĩa bằng cách ghi đè các tiêu đề chấp nhận trong lớp tài nguyên. Lớp Tài nguyên là những gì có trên máy chủ, không có gì trong tài liệu Jersey về các tiêu đề ghi đè và tôi không cố gắng thay thế tiêu đề Chấp nhận mà tôi đang nhận. Tôi muốn xem tiêu đề Chấp nhận là gì, hoặc nếu không có gì. – postfuturist
Bạn đã thử với wget hoặc curl là khách hàng? Chính xác * phương thức @Test làm gì? – gsl