Jersey moxy-media-module 不支持 json

Jersey moxy-media-module does not support json

依赖关系:-

当我尝试使用 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;
  }
}

资源class:-

@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。

没有您尝试使用的初始化参数 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 正在尝试使用不在 class 路径上的 class。

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

我会做的是摆脱 MOXy jar(这是必须才能使以下工作正常),然后使用 Jackson。与其试图说明如何,我只是 post 较早的回答,该回答很好地描述了如何获得所有 Jackson Jars。

参见:

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

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