当前位置: 代码迷 >> JavaScript >> Resteasy变换JAXB和json
  详细解决方案

Resteasy变换JAXB和json

热度:125   发布时间:2012-12-24 10:43:13.0
Resteasy转换JAXB和json
resteasy其实是个很好用的类库,下面介绍下如何使用Resteay去
在JAXB和JSON中进行转换。注意resteasy使用的是Jettison JSON library
(地址:http://jettison.codehaus.org/)

1) pom.xml文件的设置
   <repositories>
<repository>
<id>JBoss repository</id>
<url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
</repository>
  </repositories>

  <dependencies>

<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.2.1.GA</version>
</dependency>

<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>2.2.0.GA</version>
</dependency>

<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jettison-provider</artifactId>
<version>2.2.0.GA</version>
</dependency>

  </dependencies>

2)写一个类,使用JAXB
 
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement(name = "movie")
public class Movie {
 
	String name;
	String director;
	int year;
 
	@XmlElement
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	@XmlElement
	public String getDirector() {
		return director;
	}
 
	public void setDirector(String director) {
		this.director = director;
	}
 
	@XmlAttribute
	public int getYear() {
		return year;
	}
 
	public void setYear(int year) {
		this.year = year;
	}
 
}





3) 然后我们就可以把上面的pojo类转变为json了,看下jboss的reseteasy是如何做的,
  

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.jboss.resteasy.annotations.providers.jaxb.json.BadgerFish;
 
@Path("/json/movie")
public class JSONService {
 
	@BadgerFish
	@GET
	@Path("/get")
	@Produces("application/json")
	public Movie getMovieInJSON() {
 
		Movie movie = new Movie();
		movie.setName("Transformers: Dark of the Moon");
		movie.setDirector("Michael Bay");
		movie.setYear(2011);
 
		return movie; 
 
	}
 
}


4 当访问“/json/movie/gets"时,就显示对应的json了
 
{
	"movie":
	{
		"@year":"2011",
		"director":{
			"$":"Michael Bay"
		},
		"name":{
			"$":"Transformers: Dark of the Moon"
		}
	}
}


   至于这个@BadgerFish有点怪怪的,有待进一步学习
1 楼 jinnianshilongnian 2012-09-22  
天天研究新东西呢  
2 楼 witcheryne 2012-09-22  
不用注解也能序列化Json
试试Date类型,序列化和反序列化会有意外发生
3 楼 jackyrong 2012-09-22  
jinnianshilongnian 写道
天天研究新东西呢  


这个其实是看老外的东西的拉,不是什么新东西了,REST的东西
4 楼 nathanleewei 2012-09-22  
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

“使用JAXB“? 这个和jaxb没关系

5 楼 syx278250658 2012-09-25  
nathanleewei 写道
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

“使用JAXB“? 这个和jaxb没关系


rest easy可能自动把json、xml转成对象的,给你的方法直接用,如果你没的jaxb那么就可能报错。
6 楼 weijavamen 2012-10-12  
如果 POJO 类 Movie 存在继承关系,又该如何转换呢?
  相关解决方案