JAVA对象与XML,JSON转换
//定义接口
public interface DataManage {
String beanToString(Object obj) throws Exception;
Object stringToBean(String str, Class<?> clazz) throws Exception;
}
//JSON与JAVA对象转换
public class JsonDataManage implements DataManage {
private static final String JSON_EMPTY = "{}";
@Override
public String beanToString(Object obj) throws Exception {
// TODO Auto-generated method stub
if (obj == null)
return JSON_EMPTY;
return JSONObject.fromObject(obj).toString();
}
@Override
public Object stringToBean(String str, Class<?> clazz) throws Exception {
// TODO Auto-generated method stub
if (StringUtils.isEmpty(str))
return null;
try {
JSONObject jsonObject = JSONObject.fromObject(str);
return JSONObject.toBean(jsonObject, clazz);
} catch (JSONException e) {
throw new Exception(e.getMessage() + ":" + str, e);
}
}
}
//JAVA对象与XML转换
public class XmlDataManage implements DataManage {
private static final String EMPTY_STR = "";
@Override
public String beanToString(Object obj) throws Exception {
// TODO Auto-generated method stub
if (obj == null)
return "";
String xmlString = EMPTY_STR;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter sw = new StringWriter();
jaxbMarshaller.marshal(obj, sw);
xmlString = sw.toString();
} catch (JAXBException e) {
throw new Exception("obj " + obj + " to string exception",
e);
}
return xmlString;
}
@Override
public Object stringToBean(String str, Class<?> clazz) throws Exception {
// TODO Auto-generated method stub
Unmarshaller us = null;
JAXBContext context = null;
try {
context = JAXBContext.newInstance(clazz);
us = context.createUnmarshaller();
StringReader reader = new StringReader(str);
return us.unmarshal(reader);
} catch(JAXBException e) {
throw new Exception("string " + str + " to bean exception");
}
}
}
//工厂模式整合转换过程
import org.apache.commons.lang.StringUtils;
public class DataManageFactory {
private static final String JSON = "json";
private static final String XML = "xml";
private DataManageFactory() {
}
public static DataManage instance(String type) {
DataManage dm = new XmlDataManage();
if (StringUtils.isEmpty(type) || type.equals(XML)) {
return dm;
} else if (type.equals(JSON)) {
return new JsonDataManage();
}
return dm;
}
}
//测试类
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Colleague")
public class Colleague {
protected String username;
protected String nickname;
public Colleague() {
super();
}
public Colleague(Colleague colleague) {
username = colleague.username;
nickname = colleague.nickname;
}
public Colleague(String username, String nickname,
String avatar, String sign) {
super();
this.username = username;
this.nickname = nickname;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
//测试代码
public class TestXML {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
data.setRelationers(relationers);
try {
String r = "";
r = DataManageFactory.instance("xml").beanToString(data);
System.out.println(r);
} catch (Exception e) {
e.printStackTrace();
}
}
}