Tôi hiện đang gặp sự cố với Jersey và Jackson nơi tôi không thể tìm thấy giải pháp cho: Khi tôi cố gắng nhận POJO được tuần tự hóa từ JSON dưới dạng tham số POST một Jersey-Endpoint, nó trả về một lỗi nếu tôi gọi nó từ một uberjar. Nếu tôi sử dụng cùng một cuộc gọi wget sau khi tôi bắt đầu phương pháp chính từ nhật thực, mọi thứ hoạt động tốt và tôi nhận được câu trả lời mong đợi. Tôi đã tìm kiếm những người khác gặp sự cố khi sử dụng các loại ứng dụng áo và sau tham số, như Error 415 Unsupported Media Type: POST not reaching REST if JSON, but it does if XML và JAX-RS: How to automatically serialize a collection when returning a Response object?, nhưng các lỗi chính mà chúng không chỉ định tiêu đề trong cuộc gọi hoặc sử dụng thẻ @ Consumes-tags không phải. Theo nghiên cứu của tôi không ai có vấn đề tương tự mà các cuộc gọi đã làm việc khi máy chủ được bắt đầu từ nhật thực, nhưng không hoạt động khi máy chủ được bắt đầu từ bên ngoài.Loại phương tiện không được hỗ trợ khi sử dụng Jersey và Jackson từ uberjar
Lớp khởi chạy máy chủ như sau:
public class ServerStarter {
public static final String BASE_URI = "http://localhost:8282/test/";
public static void main(String[] args) throws IOException {
final ResourceConfig rc = new ResourceConfig().packages("starter");
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
System.out.println(String.format("Drücke Enter um Server zu beenden.", BASE_URI));
System.in.read();
server.stop();
}
}
Và Endpoint trông như thế này:
@Path("testme")
public class Endpoint {
@POST
@Consumes(MediaType.APPLICATION_JSON)
public String testMe(Parameters ep) {
return ep.toString();
}
}
và các thông số hạng nhất, mà nên là POJO, trông như thế này:
public class Parameters {
private int x;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
Nếu tôi thực hiện lắp ráp gói sạch mvn: đơn, khởi động máy chủ và sau đó gọi wget localhost:8282/test/testme --post-data='{"x": 10 }' --header="Content-Type: application/json"
, trả về 415 Unsupported Media Type
.
Các phụ thuộc trong pom.xml như sau:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
<version>2.13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.13</version>
</dependency>
Có ai biết làm thế nào để giải quyết vấn đề này? Tôi ra khỏi manh mối, theo như tôi nghĩ, cuộc gọi từ nhật thực phải tương tự như lời kêu gọi trong uberjar.
Có thể cú pháp đã thay đổi kể từ JAX-RS 1.0, nhưng không nên là một chuỗi các chuỗi trong giá trị @Consumes, ví dụ: '@Consumes ({MediaType.APPLICATION_JSON})'? – nitind
Tôi đang lo ngại vấn đề tương tự với Jetty: http://stackoverflow.com/questions/27971384/jetty-jersey-jackson-different-behavior-in-eclipse-success-vs-command-lin – Whimusical
tôi có cùng vấn đề và tôi đã có thể khắc phục nó bằng cách sử dụng http://stackoverflow.com/questions/27971384/jetty-jersey-jackson-different-behavior-in-eclipse-success-vs-command-lin/40843828#40843828 – gihan