gpt4 book ai didi

java - Jersey moxy-media-module 不支持 json

转载 作者:行者123 更新时间:2023-11-30 10:57:47 25 4
gpt4 key购买 nike

依赖关系:-

enter image description here当我尝试使用 moxy-media 模块将 POJO 转换为 json 时出现异常。

Java 代码:-(Pojo)

@XmlRootElement
public class MoxyUser {
public String name;
public int age;

public MoxyUser(){}

public MoxyUser(String name,int age){
this.name=name;
this.age=age;
}
}

资源类:-

@Path("/moxy")
public class MoxyResource {
@GET
@Produces("application/json")
public MoxyUser getMoxyUser(){
return new MoxyUser("Murugesan",13);
}
}

部署描述符:-

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>JerseyJsonMoxy</display-name>
<servlet>
<servlet-name>Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>org.jersey.json.resources</param-value>
</init-param>
<init-param>
<param-name>jersey-media-moxy</param-name>
<param-value>org.glassfish.jersey.media</param-value>
</init-param>
<init-param>
<param-name>org.eclipse.persistence.moxy</param-name>
<param-value>org.eclipse.persistence</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Application</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.html</welcome-file>
</welcome-file-list>

异常:-

java.lang.NoClassDefFoundError: org/eclipse/persistence/internal/queries/ContainerPolicy
java.lang.Class.getDeclaredMethods0(Native Method)

请有人帮我解决这个问题。我没有使用 maven。

最佳答案

没有您尝试使用的 init-param jersey-media-moxy 这样的东西。无论您在哪里发现它,您都必须将它误认为是 Maven 依赖项。您拥有的参数名称和值实际上是 MOXy 依赖项的 Maven 坐标。与 org.eclipse.persistence.moxy 相同。你完全可以摆脱这一切

<init-param>
<param-name>jersey-media-moxy</param-name>
<param-value>org.glassfish.jersey.media</param-value>
</init-param>
<init-param>
<param-name>org.eclipse.persistence.moxy</param-name>
<param-value>org.eclipse.persistence</param-value>
</init-param>

但这不是问题所在。 MOXy jar 仍然依赖于您没有的其他 jar。这就是 NoClassDefFound 的原因。这意味着 MOXy 正在尝试使用不在类路径中的类。

我不太清楚 MOXy 需要什么 jar,我通常使用 Maven 并让 Maven 拉入所需的 Jar。

相反,我会做的是摆脱 MOXy jar(这是 必须 才能使以下工作正常进行),然后只需使用 Jackson。与其试图说明如何,我将发布到一个较早的答案,该答案很好地描述了如何获得所有 jackson jar 。

参见:

如果您真的必须使用 MOXy,那么您需要以下所有 jar

enter image description here

请注意,您使用的是新版本的 Jersey。该图像是来自旧答案的图像,用户使用的是 Jersey 2.13。您将希望获得所有 eclipse 链接 jar 的相应版本。请阅读上面“查看”中的链接。它描述了如何找到您应该查找的正确版本。使用与图像中相同的版本可能不会成为问题,但您可能会遇到问题。我只是确保获得与您的 jersey-moxy 版本相匹配的正确版本

关于java - Jersey moxy-media-module 不支持 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452981/

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