2014-11-05 117 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