gpt4 book ai didi

java - Jetty + Jersey + Jackson,Eclipse(成功)与命令行(错误不支持的媒体类型)中的不同行为!

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:05 31 4
gpt4 key购买 nike

试图在 Eclipse 之外运行 Jetty Jersey 和 Jackson,我快疯了。

我有一个主类:

public class Main {

public static void main(String[] args) throws Exception {

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*").setInitParameter(
"jersey.config.server.provider.classnames", CanaryEndpoint.class.getCanonicalName());

Server jettyServer = new org.eclipse.jetty.server.Server(8089);
jettyServer.setHandler(context);
jettyServer.start();
jettyServer.join();
}
}

端点类:

@Path("/endpoint")
public class CanaryEndpoint {

@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String canaryTest(ValueWrapper param) {
System.out.println("Deserialized Property: " + param.isFlag());
return "{OK}";
}
}

和一个实体(反序列化)类:

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class ValueWrapper {
@XmlElement
public boolean flag;

public ValueWrapper() {}
public boolean isFlag() { return flag; }
public void setFlag(boolean flag) { this.flag = flag;}
}

现在到了有趣的部分了。我使用 Postman 通过向 8089 端口发送 POST 请愿和 {"flag": "true"} 的原始 JSON 值来测试 JSON 消耗,同时充分设置 Content-type 和 Accept。

当我通过 eclipse 服务器正确回答主类时,但是当我在 CLI 中执行时(mvn clean package + java -cpJar main_class),服务器回答错误 415:不受支持的媒体类型

我的简单 pom.xml:

<jersey.version>2.14</jersey.version>
<jetty-version>9.2.6.v20141205</jetty-version>
(...)
<artifactId>jetty-server</artifactId>
<artifactId>jetty-servlet</artifactId>
<artifactId>jersey-container-servlet-core</artifactId>
<artifactId>jersey-json</artifactId>
<artifactId>jersey-media-json-jackson</artifactId>

关于正在发生的事情有什么建议吗?

编辑:我缩小了一点问题。从控制台执行应用程序时,似乎 com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider 未注册。如何手动注册?

最佳答案

我在 uber jar 中执行 Jersey 休息服务时遇到了同样的问题。我能够使用以下文章解决这个问题。希望这可能对某人有所帮助。 JSON example with Jersey + Jackson

上面的例子是用 jersey 1.x 编写的。这里是 jersey 2.x 的实现。

将以下 jersey jackson 依赖项添加到您的 pom

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.21</version>
</dependency>

并在web.xml中添加如下init-param

<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.jackson.JacksonFeature</param-value>
</init-param>

或者您可以像@peeskillet 提到的那样显式注册 jackson 功能。

ResourceConfig config = new ResourceConfig();
config.register(JacksonFeature.class);

关于java - Jetty + Jersey + Jackson,Eclipse(成功)与命令行(错误不支持的媒体类型)中的不同行为!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27971384/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com