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 版本相匹配的正确版本
依赖关系:-
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 版本相匹配的正确版本