- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
giống Cách sử dụng thiết bị chặn Jersey để nhận nội dung yêu cầu Như đã đề cập trong , tôi đang sửa đổi EntityInputStream trong ContainerRequestFilter.
bộ lọc công khai (Yêu cầu ContainerRequest) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
Luồng đầu vào trong = request.getEntityInputStream();
try{
Readerwriter.writeTo(vào, ra);
byte[] requestEntity = out.toByteArray();
// LÀM ĐIỀU GÌ ĐÓ VỚI byte TẠI ĐÂY
request.setEntityInputStream(ByteArrayInputStream mới(requestEntity));
}/// code xử lý lỗi tại đây
}
Tuy nhiên, tôi không biết cách truy cập vào Luồng đầu vào đã sửa đổi. Tôi có thể lấy ServletContext trong tài nguyên, nhưng tôi không biết cách lấy đối tượng mà tôi thực sự đang sửa đổi trong bộ lọc, đó là ContainerRequest.
Tôi có thể làm điều gì đó như thế này không? Jersey sẽ không bắt đầu khi tôi thử điều này:
@Bưu kiện
@Path("/test")
kiểm tra phản hồi công khai(@Context ContainerRequest cr){
// bla bla
trở lại....
}
Lỗi áo đấu:
Phương thức public javax.ws.rs.core.Response example.TestController.test(com.sun.jersey.spi.container.ContainerRequest) Thiếu phần phụ thuộc, POST được chú thích là tài nguyên, lớp example.TestController, không được công nhận là phương thức tài nguyên hợp lệ.
Tôi đang sử dụng phiên bản cũ hơn của Jersey 1.8 nên tôi không chắc đó có phải là một phần của vấn đề hay không.
câu trả lời hay nhất
Tất cả những gì bạn cần làm là chấp nhận InputStream
Là nội dung thực thể trong phương thức tài nguyên. nếu bạn muốn ByteArrayInputStream
Chỉ cần bỏ phiếu cho nó.
@BƯU KIỆN
Bài đăng phản hồi công khai(InputStream in) {
ByteArrayInputStream bin = (ByteArrayInputStream)in;
}
Nếu bạn chưa biết, cách Jersey chuyển đổi luồng yêu cầu (đối với nội dung yêu cầu) thành loại Java (ví dụ: JSON thành POJO) là thông qua MessageBodyReader
nhận ra. Thứ hai. bạn có thể Nhà cung cấp thực thể JAX-RS Đọc thêm về họ.
Jersey đã cung cấp một số trình đọc tiêu chuẩn cho các loại có thể chuyển đổi dễ dàng như String. Hầu hết các loại nội dung có thể được chuyển đổi thành chuỗi. Một lần nữa, nó có một đầu đọc để xử lý InputStream
. Đây có lẽ là chuyển đổi đơn giản nhất vì yêu cầu đã có sẵn InputStream
được truyền vào, vì vậy thực ra tất cả những gì người đọc cần làm là trả về luồng ban đầu, đây là nội dung được truyền vào phương thức của chúng ta.
Nếu chúng ta nhìn vào việc thực hiện Nhà cung cấp luồng đầu vào
, chúng ta có thể thấy rằng đây là những gì thực sự xảy ra. Luồng ban đầu được trả về đơn giản .Vì bộ lọc diễn ra trước trình đọc nên trình đọc chỉ cần trả về luồng mà chúng tôi đã đặt.
Đây là một cách sử dụng Khung kiểm tra Jersey Ví dụ đầy đủ về
lớp công khai StreamFilterTest mở rộng JerseyTest {
lớp tĩnh công khai inputStreamFilter triển khai ContainerRequestFilter {
@Ghi đè
bộ lọc ContainerRequest công khai (Yêu cầu ContainerRequest) {
thử {
ByteArrayOutputStream out = new ByteArrayOutputStream();
Luồng đầu vào trong = request.getEntityInputStream();
ReaderWriter.writeTo(vào, ra);
byte[] requestBytes = out.toByteArray();
byte[] worldBytes = "World".getBytes(StandardCharsets.UTF_8);
byte[] newBytes = byte mới[requestBytes.length + worldBytes.length];
System.arraycopy(requestBytes, 0, newBytes, 0, requestBytes.length);
System.arraycopy(worldBytes, 0, newBytes, requestBytes.length, worldBytes.length);
request.setEntityInputStream(ByteArrayInputStream mới(newBytes));
} bắt (IOException cũ) {
Logger.getLogger(InputStreamFilter.class.getName()).log(Level.SEVERE, null, ex);
ném RuntimeException mới (ví dụ);
}
yêu cầu trả lại;
}
}
@Path("luồng")
lớp tĩnh công khai StreamResource {
@BƯU KIỆN
bài đăng Chuỗi công khai (InputStream in) ném Ngoại lệ {
ByteArrayInputStream bin = (ByteArrayInputStream) trong;
Trình soạn thảo StringWriter = new StringWriter();
ReaderWriter.writeTo(InputStreamReader mới(bin), trình ghi);
return writer.toString();
}
}
lớp tĩnh công khai AppConfig mở rộng DefaultResourceConfig {
AppConfig công khai() {
super(StreamResource.class);
getContainerRequestFilters().add(InputStreamFilter() mới);
}
}
@Ghi đè
cấu hình WebAppDescriptor công khai () {
trả về WebAppDescriptor.Builder() mới
.initParam(WebComponent.RESOURCE_CONFIG_CLASS,
AppConfig.class.getName())
.xây dựng();
}
@Bài kiểm tra
khoảng trống công khai nên_return_hello_world() {
Phản hồi chuỗi = Resource().path("stream").post(String.class, "Xin chào");
khẳng địnhEquals("Xin chào thế giới", phản hồi);
}
}
Đây là một sự phụ thuộc thử nghiệm
com.sun.jersey.jersey-test-framework
jersey-test-framework-grizzly2
1.17.1
kiểm tra
Về java - Jersey inputStream được sửa đổi trong filter. Không thể tìm ra cách truy cập inputStream đã sửa đổi trong Tài nguyên Jersey, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/32632342/
Tôi đã đọc tài liệu Jersey và nó nói rằng Jersey tự động đóng kết nối sau khi đọc thực thể (ví dụ: reply.readEntity(SomeObject.class)) nhưng khi ném ra một ngoại lệ
Sự khác biệt giữa Jersey vs Jersey (Độc lập) so với Jersey với Grizzly vs Jersey với Tomcat - đối với các dịch vụ REST
Làm cách nào để sử dụng tài nguyên không phải của Jersey và tài nguyên của Jersey thông qua guice? Tôi muốn "/" được xử lý bởi một servlet bình thường. Nhưng tôi muốn Jersey xử lý "/users". Giả sử tôi có một tệp có @Path("/use
Tôi đang cố gắng tạo một ứng dụng RESTful cơ bản bằng Maven, Apache Tomcat 7.0, Eclipse IDE. Tôi đã xem qua jersey-serv trong một số mã mẫu do google cung cấp
Tôi đã nâng cấp từ Jersey 1.7 lên 2.16, nhưng Jersey dường như không thể tìm thấy tài nguyên của tôi (xem ngăn xếp bên dưới). Có ý tưởng gì đang xảy ra không? Tôi đã thử khởi tạo trong lớp ứng dụng tùy chỉnh mở rộng ResourceConfig
Tôi đang sử dụng phương thức com.yammer.dropwizard.config.Environment addProvider để đăng ký nhà cung cấp ở Jersey. Tôi cũng có một nhà cung cấp tùy chỉnh thực hiện điều gì đó tương tự như Dr.
Trong Jersey 1.x, bạn có thể sử dụng ContainerRequest.getFormParameters() để thực hiện lọc yêu cầu trên dữ liệu biểu mẫu, nhưng tôi không thể thấy sự tương đương rõ ràng trong Jersey 2.x. Tôi đã đạt được
Tôi đang sử dụng trình xử lý Jackson tích hợp của Jersey để chuyển đổi JSON đến thành POJO, ví dụ: @POST @Consumes(MediaType.APPLICATION_JSON) public Respon
Tôi đang cố gắng tạo tài nguyên Jersey theo chương trình (không có chú thích). Tôi có một phương thức raiseAlarm lấy Tên và id làm tham số đầu vào. Tôi muốn lấy tên từ đầu vào JSON và tôi muốn id đến từ tham số đường dẫn. thế hệ
Tài liệu chính thức của Dropwizard Jersey client không thể kiểm tra được. Có ai có mẫu client dropwizard Jersey không? Câu trả lời hay nhất tôi tìm thấy trên Dropwizard
Tôi đã tìm kiếm giải pháp cho vấn đề này nhưng không thành công. Các bài viết gần đây nhất tôi tìm thấy có từ năm 2010. Tôi đang sử dụng Jersey 1.12 có nhúng Grizzly 2.2.1. Nếu tôi hiểu đúng, trừ khi tôi thêm Jers
Tôi muốn phát triển API Web sẽ tạo và sử dụng dữ liệu JSON và XML. Tôi đã sử dụng JAXB để hỗ trợ XML và nó hoạt động tốt. Bây giờ tôi muốn thêm loại JSON. Tôi đã xem xét các hướng dẫn khác nhau, tất cả đều sử dụng các phần phụ thuộc khác nhau,
Tôi đang sử dụng Jersey 1.4 với Tomcat 6 như được mô tả ở đây: http://wikis.sun.com/display/Jersey/WADL. Tôi đã thử mọi cách có thể với "/applatio
Tôi mới làm quen với jax-rs và đã xây dựng một dịch vụ web với jersey và glassfish. Điều tôi cần là một cách để được gọi khi dịch vụ được bắt đầu. Theo cách tiếp cận này, tôi muốn tải tệp cấu hình tùy chỉnh, đặt một số thuộc tính, ghi nhật ký, v.v. tôi cố gắng
Làm cách nào để ngăn Jersey gửi trang HTML ở phía máy khách khi máy khách yêu cầu loại MIME không được chấp nhận? Tôi muốn sử dụng ExceptionMapper nhưng tôi không chắc nên bắt ngoại lệ nào hoặc đây có phải là cách xử lý không
Tôi đang cố chặn cuộc gọi tài nguyên sau khi JSON của nó được giải mã. Bằng cách đọc một số diễn đàn và bài đăng, tôi thấy rằng tôi có thể thực hiện việc này khi triển khai. org.glassfish.jersey.server.spi.internal.Res
Ứng dụng web của tôi chứa thư viện chứa lớp được chú thích bằng @javax.ws.rs.ext.Provider. .Nếu lớp này xuất hiện, ứng dụng web của tôi (được triển khai dưới dạng WAR trong EAR) không khởi động được và hiển thị với
Tôi muốn tùy chỉnh phản hồi 404 mà máy chủ (không phải tôi) đưa ra khi không thể tìm thấy tài nguyên được yêu cầu (hoặc tự ném WebApplicationException tùy chỉnh, nếu có thể kiểm tra xem tài nguyên được yêu cầu có tồn tại trong ứng dụng không)? Danh sách tài nguyên được lưu trữ trong một
Tôi có API Jersey được bảo vệ bởi Shibboleth (triển khai SSO). Shibboleth đặt ID người dùng đã đăng nhập vào thuộc tính yêu cầu. Ở phần phụ trợ, tôi sử dụng Shira để ủy quyền. Hiro muốn biết thêm về Den
Tôi hiện đang sử dụng Jersey để trả về JSON. Làm cách nào để trả về JSONP? Ví dụ: phương thức RESTful hiện tại của tôi là: @GET @Produces(MediaType.APPLICATION_JSON) pub
Tôi là một lập trình viên xuất sắc, rất giỏi!