為了項(xiàng)目更加清晰,我們建立 com.waylau.rest.bean
,在該包下面創(chuàng)建一個(gè) POJO 對象 MyBean:
public class MyBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
我們想把這個(gè)對象返回給客戶端,在 MyResource 資源下,寫了
/**
* 方法處理 HTTP GET 請求。返回的對象以"application/json"媒體類型
* 給客戶端
*
* @return MyPojo 以 application/json 形式響應(yīng)
*/
@GET
@Path("pojojson")
@Produces(MediaType.APPLICATION_JSON)
public MyBean getPojoJson() {
MyBean pojo = new MyBean();
pojo.setName("waylau.com");
pojo.setAge(28);
return pojo;
}
其中 @Produces(MediaType.APPLICATION_XML)
意思是以 JSON 形式將對象返回給客戶端。
在 index.jsp 里面,我們寫了一個(gè)調(diào)用該 API 的方法
<p><a href="webapi/myresource/pojojson">POJO JSON</a>
啟動項(xiàng)目,點(diǎn)擊“POJO JSON”,后臺提示如下錯(cuò)誤
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
SEVERE: MessageBodyWriter not found for media type=application/json, type=class com.waylau.rest.bean.MyPojo, genericType=class com.waylau.rest.bean.MyPojo.
那是因?yàn)?POJO 對象未被序列化成 JSON 對象,所以找不到,下面介紹幾種常用的序列化手段。
需要添加 jersey-media-moxy 依賴庫在你的 pom.xml 來使用 MOXy
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
由于 JSON 綁定特性是在自動發(fā)現(xiàn)的列表里,所以無需再注冊該特性就使用了。(關(guān)于“自動發(fā)現(xiàn)”,詳見《Jersey 2.x 用戶指南》“4.3.自動發(fā)現(xiàn)的特性”一節(jié))
啟動項(xiàng)目,點(diǎn)擊“POJO JSON”,頁面輸出
{"age":28,"name":"waylau.com"}
使用 Jackson 2.x 需添加 jersey-media-json-jackson 模塊到 pom.xml:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency>
我們想把這個(gè)對象返回給客戶端,在 MyResource 資源下,寫了
/**
* 方法處理 HTTP GET 請求。返回的對象以"application/xml"媒體類型
* 給客戶端
*
* @return MyPojo 以 application/xml 形式響應(yīng)
*/
@GET
@Path("pojoxml")
@Produces(MediaType.APPLICATION_XML)
public MyBean getPojoXml() {
MyBean pojo = new MyBean();
pojo.setName("waylau.com");
pojo.setAge(28);
return pojo;
}
其中 @Produces(MediaType.APPLICATION_XML)
意思是以 XML 形式將對象返回給客戶端
在 index.jsp 里面,我們寫了一個(gè)調(diào)用該 API 的方法
<p><a href="webapi/myresource/pojoxml">POJO XML</a>
啟動項(xiàng)目,點(diǎn)擊“POJO XML”,后臺提示如下錯(cuò)誤
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
SEVERE: MessageBodyWriter not found for media type=application/xml, type=class com.waylau.rest.bean.MyPojo, genericType=class com.waylau.rest.bean.MyPojo.
那是因?yàn)?POJO 對象未被序列化成 XML 對象,所以找不到,解決方法很簡單,在 MyBean 上面加上@XmlRootElement
注解即可
@XmlRootElement
public class MyBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
@XmlRootElement 作用是將一個(gè)類或一個(gè)枚舉類型映射為一個(gè) XML 元素。
再次啟動項(xiàng)目,點(diǎn)擊“POJO XML”,顯示正常
見 handle-json-xml
項(xiàng)目。
更多建議: