2010-05-20 4 views
3

RESTEasy에서 String [] 또는 List를 마샬링 및 언 마샬링하는 간단한 방법이 있습니까?RESTEasy - 간단한 문자열 배열/컬렉션 마샬링

내 코드 샘플 :

@GET 
@Path("/getSomething") 
@Produces(MediaType.APPLICATION_JSON) 
public List<String> getSomeData() { 
    return Arrays.asList("a","b","c","d"); 

} 

위는 나에게 예외를 제공합니다

Could not find MessageBodyWriter for response object 
of type: java.util.Arrays$ArrayList of media type: application/json 

답변

1

내가 XML 및 JSON 모두 같은 문제가 있습니다. 아직 솔루션을 찾지 못했지만 JAXB와 관련이 있다고 생각합니다.

그래서 JAXB가 이미 JDK6과 함께 제공되며 JBoss의 종속성이 올바르지 않은 것으로 나타났습니다. 그들은 이제 어떻게 끝났는 지에 대한 또 다른 해결책을 찾아야합니다. 어떤이는 당신이 그것을 해결할 수있는 방법을 방법 :

<!-- JAXB Reasteasy support --> 
<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-jaxb-provider</artifactId> 
<version>1.2.1.GA</version> 
<scope>compile</scope> 
<exclusions> 
    <exclusion> 
     <groupId>com.sun.xml.bind</groupId> 
     <artifactId>jaxb-impl</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>com.sun.xml.stream</groupId> 
     <artifactId>sjsxp</artifactId> 
    </exclusion> 
</exclusions> 

당신은 받는다는에서 RESTEasy가 JAXB 프로 바이더가 아닌 JAXB 파일을 가져.

4

이처럼 포장해야 할 수도 있습니다 :

public List<JaxbString> getList(){ 
    List<JaxbString> ret= new ArrayList<JaxbString>(); 
    List<String> list = Array.asList("a","b","c"); 
      for(String s:list){ 
       ret.add(new JaxbString(s)); 
      } 
    return ret; 
} 

@XmlRootElement 
public class JaxbString { 

    private String value; 

    public JaxbString(){} 

    public JaxbString(String v){ 
     this.setValue(v); 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    @XmlElement 
    public String getValue() { 
     return value; 
    } 

}