2014-11-05 116 views
0

當我嘗試從其他Web服務請求資源時遇到麻煩,在此頁中發現相同的問題:Jersey body writer errors for java.lang.Boolean when deployed,但對我無效,不幸的是。所以,那些是我的代碼:java.lang.Boolean澤西島身體作家錯誤

@GET 
    @Produces(MediaType.APPLICATION_XML) 
    @Path("/isOnlineXml") 
    public Boolean isOnlineXml(){ 
     return Boolean.TRUE; 
    } 

web.xml中:

<servlet> 
    <servlet-name>jersey-helloworld-serlvet</servlet-name> 
    <servlet-class> 
       com.sun.jersey.spi.container.servlet.ServletContainer 
      </servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.integration</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param>  
    <load-on-startup>1</load-on-startup> 
</servlet> 

的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>JAXRS-Rest</groupId> 
<artifactId>JAXRS-Rest</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<build> 
    <sourceDirectory>src</sourceDirectory> 
    <finalName>JAXRS-Rest</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <transformers> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>com.company.product.Main</mainClass> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <webXml>WebContent\WEB-INF\web.xml</webXml> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.0.2</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-core-asl</artifactId> 
     <version>1.9.12</version> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.9.12</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.9</version> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-xc</artifactId> 
     <version>1.9.12</version> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-jaxrs</artifactId> 
     <version>1.9.12</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-bundle</artifactId> 
     <version>1.18.2</version> 
    </dependency> 
</dependencies> 
產生錯誤

代碼

最後,例外:

A message body writer for Java class java.lang.Boolean, and Java type class java.lang.Boolean, and MIME media type application/xml was not found. 
The registered message body writers compatible with the MIME media type are: 
application/xml -> 
    com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App 
    com.sun.jersey.core.impl.provider.entity.DocumentProvider 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter 
    com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App 
    com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App 
*/* -> 
    com.sun.jersey.core.impl.provider.entity.FormProvider 
    com.sun.jersey.core.impl.provider.entity.StringProvider 
    com.sun.jersey.core.impl.provider.entity.ByteArrayProvider 
    com.sun.jersey.core.impl.provider.entity.FileProvider 
    com.sun.jersey.core.impl.provider.entity.InputStreamProvider 
    com.sun.jersey.core.impl.provider.entity.DataSourceProvider 
    com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.ReaderProvider 
    com.sun.jersey.core.impl.provider.entity.DocumentProvider 
    com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider 
    com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter 
    com.sun.jersey.server.impl.template.ViewableMessageBodyWriter 
    com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General 
    com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider 
    com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General 
    com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General 
    com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General 
    com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General 
    com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy 

回答

0

嘗試封裝在將與@XmlRootElement來註釋就像一個POJO您的布爾值:

@XmlRootElement 
public class MyVO { 

private Boolean booleanValue; 

// getters and setters 
} 

應該是足夠的,對另一端只是檢索你的VO bean的特定字段。

如果這仍然不起作用,最後一個選項會將該字段映射爲字符串,並在需要時通過Javascript或其他語言進行轉換。

你也並不需要在你的web.xml的JAX-RS配置任何東西,你可以設置使用javax.ws.rs.core.Application您的服務:

package com.myapp.web.common.application; 

import java.util.HashSet; 
import java.util.Set; 

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("/rest") 
public class MyWebApplication extends Application { 
    @Override 
    public Set<Class<?>> getClasses() { 
     final Set<Class<?>> classes = new HashSet<Class<?>>(); 

     // register root resources 
     classes.add(MyRESTService1.class); 
     classes.add(MyRESTService2class); 
     return classes; 
    }  
} 
+0

我試過封裝布爾值,它的工作原理,但我想知道爲什麼不可能只返回布爾對象。 – diegosoaresub 2014-11-05 12:01:09

+0

這是因爲在開箱即用的Jersey實現中沒有原始布爾類型的默認消息正文編寫器,您需要將其封裝在使用@XmlRootElement註釋的類上,否則您可以創建自己的自定義消息正文編寫器。但我會選擇第一個選項,因爲它更簡單。 – guilhebl 2014-11-06 18:32:27