公司最近的一个项目,前端使用jquery,后端使用了jersey 2.x。
要把前段传到后端的JSON数据,反序列号成JAVA对象,首先要选择一个provider,Jersey中,可以选择的有jackson,或者Moxy,这里选择moxy做说明。
1. 在项目的pom.xml中引入moxy包
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
2. 创建一个JAVA bean,这个bean里有个Date属性,需要特殊处理
@XmlRootElement
public class Annotation {
private Integer id;
@XmlJavaTypeAdapter(DateAdapter.class)
private Date birthday;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
3. 创建反序列化成Date属性的插件
public class DateAdapter extends XmlAdapter<String,Date> {
private static Logger logger = LogManager.getLogger(DateAdapter.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date unmarshal(String v) throws Exception {
return dateFormat.parse(v);
}
@Override
public String marshal(Date v) throws Exception {
return dateFormat.format(v);
}
}
4. 创建Resource
@PUT
@Consumes(MediaType.APPLICATION_JSON)
public String create(final MyBean myBean) {
myBean.getId();////这里就可以取得数据了
myBean.getBirthday();//这里就可以取得数据了
}
5. 客户端的代码
$.ajax({
url:"xxxx/xx/zz",
type:"POST",
dataType:"json",
contentType:'application/json; charset=utf-8',
data:JSON.stringify({"id":"123","birthday":"2014-11-16"}),
success:function(result){
console.log(result);
}
});