我目前正面临着泽西和杰克逊的问题,我无法找到解决方案:当我试图从JSON序列化一个POJO作为Jersey-Endpoint中的POST参数时,如果我调用它会返回错误来自一个uberjar.如果我在从eclipse启动main方法后使用相同的wget-call,一切正常,我得到了预期的答案.我在使用jersey和post-parameter应用程序类型时搜索了其他有问题的人,比如错误415不支持的媒体类型:POST如果JSON没有达到REST,但是如果XML和JAX-RS会这样做:如何自动序列化集合时返回一个Response对象?,但主要的错误是他们没有在通话中指定标题或使用错误的@ Consumes-tags,我没有.根据我的研究,没有人有类似的问题,当服务器从eclipse启动时调用工作,但是当服务器从外部启动时没有工作.
启动服务器的类如下:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
而Endpoint看起来像这样:
@Path("testme")
public class Endpoint {
@POST
@Consumes(MediaType.APPLICATION_JSON)
public String testMe(Parameters ep) {
return ep.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
而Parameters-class应该是POJO,如下所示:
public class Parameters {
private int x;
public int getX() {
return x;
} …Run Code Online (Sandbox Code Playgroud) 我有一个端点:
@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String canaryTest(String JSON) {
return JSON;
}
Run Code Online (Sandbox Code Playgroud)
当我使用Jersey在Jetty中注册时
ServletHolder holder = new ServletHolder(new ServletContainer());
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好.但是,如果我尝试明确指定默认配置,它将停止工作(从端点返回媒体类型错误).即使只是将ResourceConfig的默认实例传递给ServletContainer,它也会停止工作.
ResourceConfig config = new ResourceConfig();
//config.property(x,defaultX)
//config.property(y,defaultY)
ServletHolder holder = new ServletHolder(new ServletContainer(config));
Run Code Online (Sandbox Code Playgroud)
我想手动和显式地模拟默认配置行为,所以我在这里要问的是我应该如何配置ResourceConfig以使行为保持工作(即,要设置的属性)
PS:我正在使用Jetty 9.2.6.v20141205和Jersey 2.14.Maven中的依赖关系: