Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RESTAPI不序列化json_Java_Rest_Glassfish_Jersey 2.0_Tomcat8 - Fatal编程技术网

Java RESTAPI不序列化json

Java RESTAPI不序列化json,java,rest,glassfish,jersey-2.0,tomcat8,Java,Rest,Glassfish,Jersey 2.0,Tomcat8,我将jersey glassfish 2.0实现用于tomcat 8的restfull web服务 我的web服务工作正常,但java bean的序列化不正确。 例如,我的web服务返回遵循json { "errorCode": 200, "obj": "DestinationCountry [img=[], code=3, video=AbstractMultiMediaContent [id=0, name=null, url=null, file=null, content

我将jersey glassfish 2.0实现用于tomcat 8的restfull web服务

我的web服务工作正常,但java bean的序列化不正确。 例如,我的web服务返回遵循json

{
    "errorCode": 200,
    "obj": "DestinationCountry [img=[], code=3, video=AbstractMultiMediaContent [id=0, name=null, url=null, file=null, contentType=null, comments=null, owner=null, likes=null, tags=null, is=null], guide=Guide [guideTraslation=null, getPoi()=null, ......
}
正确的json应该是

{
    "errorCode": 200,
    "errorMsg": null,
    "obj": [
        {
            "comparableInfo": null,
            "id": 2195,
            "code": "3",
            "name": "Sudafrica",
            "continent": null,
            "idDestinationCountry": 690,
            "previewImage": {
                "comparableInfo": null,
                "id": 0,
                "name": null,
                "url": "sud_africa_viaggi_diving_2",
                "file": null,
                "contentType": null,
                "comments": null,
                "owner": null,
                "likes": null,
                "tags": null,
                "is": null,
                "numberOfLike": 0
            }
,, ..... .....

这是我的java代码

@GET
@Path("/guide/id/{idguide}")
@Produces(MediaType.APPLICATION_JSON)   
public Response getGuideById(@PathParam("idguide") int idguide, @QueryParam("uuid") String uuid)
{

    Response response = null ;
    DCResponse<Guide> dcResp = null  ;
    Configuration conf = ConfigurationFactory.getInstance() ;
    try 
    {
        conf.configurationLoader(UtilsConstants.SYS_CONF_FILE);
        DiveCircleManagerIV2 pm = (DiveCircleManagerIV2) CoreFactory.getInstance(conf.getProperty(DiveCircleConstants.DIVECIRCLE_MANAGER)) ;
        dcResp = pm.findGuideById(idguide) ;
        response = Response.status(dcResp.getErrorCode()).entity(dcResp).build() ;
    } 
    catch (ConfigurationException | IOException | FactoryException | ManagerException e) {
        log.error(e);
        e.printStackTrace();
        response = Response.status(DiveCircleConstants.INTERNAL_ERROR_CODE).build() ;
    }

    return response ;

}
@GET
@路径(“/guide/id/{idguide}”)
@产生(MediaType.APPLICATION_JSON)
公共响应getGuideById(@PathParam(“idguide”)int-idguide,@QueryParam(“uuid”)字符串uuid)
{
响应=空;
DCResponse dcResp=null;
Configuration conf=ConfigurationFactory.getInstance();
尝试
{
conf.configurationLoader(UtilsConstants.SYS\u conf\u文件);
divecircemanageriv2 pm=(divecircemanageriv2)CoreFactory.getInstance(conf.getProperty(divecirconstants.DIVECIRCLE_MANAGER));
dcResp=pm.findGuideById(idguide);
response=response.status(dcResp.getErrorCode()).entity(dcResp.build();
} 
捕获(配置异常| IOException | FactoryException | ManagerException e){
日志错误(e);
e、 printStackTrace();
response=response.status(divecirconstants.INTERNAL_ERROR_CODE).build();
}
返回响应;
}
这里是我的pom依赖项

<dependencies>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-tools</artifactId>
        <version>2.2.8</version>
    </dependency>

    <dependency>
        <groupId>com.divecircle.booking.api</groupId>
        <artifactId>BookingAPI</artifactId>
        <version>0.1</version>
    </dependency>

    <dependency>
        <groupId>com.geeoz.ean</groupId>
        <artifactId>ean-api</artifactId>
        <version>3.25.0d1</version>
    </dependency>


    <dependency>
        <groupId>javax.transaction</groupId>
        <artifactId>jta</artifactId>
        <version>1.1</version>
    </dependency>


    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.4</version>
    </dependency>


    <dependency>
        <groupId>org.jdom</groupId>
        <artifactId>jdom2</artifactId>
        <version>2.0.6</version>
    </dependency>

    <dependency>
        <groupId>com.cloudinary</groupId>
        <artifactId>cloudinary</artifactId>
        <version>1.0.8</version>
    </dependency>
    <dependency>
        <groupId>com.mandrillapp.wrapper.lutung</groupId>
        <artifactId>lutung</artifactId>
        <version>0.0.4</version>
    </dependency>

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.1.5</version>
    </dependency>

    <dependency>
        <groupId>net.sourceforge.jexcelapi</groupId>
        <artifactId>jxl</artifactId>
        <version>2.6.12</version>
    </dependency>


    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>            
    </dependency>

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.18.3</version>
        <scope>test</scope>
    </dependency>



    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
        <version>${jersey.version}</version>
    </dependency>


  <!-- ###############################################-->
   <!-- <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-processing</artifactId>
        <version>${jersey.version}</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-sse</artifactId>
        <version>${jersey.version}</version>
    </dependency>
     -->

  <!-- ###############################################-->  



    <dependency>
        <groupId>net.spy</groupId>
        <artifactId>spymemcached</artifactId>
        <version>2.12.0</version>
    </dependency>



    <dependency>
        <groupId>com.cstadvising.utils</groupId>
        <artifactId>Utils</artifactId>
        <version>1.0</version>
    </dependency>


    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>



    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>         
    </dependency>


    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-tools</artifactId>
        <version>2.2.8</version>
    </dependency>




    <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>2.2.11</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
    </dependency>
 </dependencies>

com.sun.xml.ws
jaxws工具
2.2.8
com.divecircle.booking.api
预订
0.1
com.geeoz.ean
ean api
3.25.0d1
javax.transaction
jta
1.1
org.apache.httpcomponents
httpclient
4.3.4
org.jdom
jdom2
2.0.6
com.cloudinary
阴云密布
1.0.8
com.mandrillapp.wrapper.lutung
卢顿
0.0.4
org.quartz-scheduler
石英
2.1.5
net.sourceforge.jexcelapi
jxl
2.6.12
mysql
mysql连接器java
5.1.6            
泽西岛
泽西岛客户
1.18.3
测试
org.glassfish.jersey.containers
jersey容器servlet核心
${jersey.version}
org.glassfish.jersey.media
泽西岛媒体多部分
${jersey.version}
org.glassfish.jersey.core
泽西岛客户
${jersey.version}
org.glassfish.jersey.media
泽西媒体公司
${jersey.version}
间谍网
间谍
2.12.0
com.csts.utils
乌提尔斯
1
log4j
log4j
1.2.17
朱尼特
朱尼特
4.12
试验
com.sun.xml.ws
jaxws工具
2.2.8
javax.xml.ws
JAXWSAPI
2.2.11
javax.servlet
javax.servlet-api
3.0.1
这是我的web.xml

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

  <display-name>DiveCircle</display-name>




     <listener>
        <description>System Inizilizer</description>
        <listener-class>com.cstadvising.utils.core.listener.SystemContextListener</listener-class>
     </listener>

    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>         
        <init-param>
          <param-name>jersey.config.server.provider.classnames</param-name>
          <param-value>org.glassfish.jersey.moxy.json.MoxyFeature;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
        </init-param>
        <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>com.divecircle.restful</param-value>
        </init-param>   
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
            <servlet-name>jersey-serlvet</servlet-name>
            <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>



    <listener>
       <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
   </listener>

    <context-param>
     <param-name>quartz:config-file</param-name>
     <param-value>/quartz.properties</param-value>
    </context-param>
    <context-param>
     <param-name>quartz:shutdown-on-unload</param-name>
     <param-value>true</param-value>
    </context-param>
    <context-param>
     <param-name>quartz:wait-on-shutdown</param-name>
     <param-value>true</param-value>
    </context-param>
    <context-param>
     <param-name>quartz:start-on-load</param-name>
     <param-value>true</param-value>
    </context-param>
<!--    
    <servlet>
        <servlet-name>QuartzInitializer</servlet-name>
        <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet
            </servlet-class>
        <init-param>
          <param-name>shutdown-on-unload</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>start-scheduler-on-load</param-name>
          <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
  </servlet>
     -->
</web-app>

二等分圆
系统初始化器
com.cstcadvicing.utils.core.listener.SystemContextListener
泽西塞尔维特酒店
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.classnames
org.glassfish.jersey.moxy.json.MoxyFeature;org.glassfish.jersey.media.multipart.MultiPartFeature
jersey.config.server.provider.packages
com.divecircle.restful
1.
泽西塞尔维特酒店
/休息/*
org.quartz.ee.servlet.QuartzInitializerListener
石英:配置文件
/石英晶体特性
石英:卸载时关机
真的
石英:等待关机
真的
石英:负载启动
真的
任何建议或解决方案?

问题在于MOXy(即
泽西媒体MOXy
)。序列化时,它需要知道所有类型信息。使用
DCResponse
,您有一个泛型类型,它在编译时被擦除

@XmlRootElement
public class DCResponse<T> {

    private int status;
    private String errorMsg;
    private List<T> obj;
这应该行得通

或者如果你不想担心这样的事情,考虑使用杰克逊,而不是MXY。Jackson通常不会遇到这样的问题,因为它只会反思属性。要使用Jackson,您需要去掉MOXy(这很重要),并添加以下内容

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey.version}</version>
</dependency>

org.glassfish.jersey.media
问题在于MOXy(即
jersey media MOXy
)。序列化时,它需要知道所有类型信息。使用
DCResponse
,您有一个泛型类型,它在编译时被擦除

@XmlRootElement
public class DCResponse<T> {

    private int status;
    private String errorMsg;
    private List<T> obj;
这应该行得通

或者如果你不想担心这样的事情,考虑使用杰克逊,而不是MXY。Jackson通常不会遇到这样的问题,因为它只会反思属性。要使用Jackson,您需要去掉MOXy(这很重要),并添加以下内容

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey.version}</version>
</dependency>

org.glassfish.jersey.media