版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lishuangzhe7047/article/details/78634570
最近用springcloud写了一个模拟的hbase rest server,供自动化测试使用,为了达到测试目的,hbase rest server除了跟原生的hbase rest的功能一样外,传入的参数,返回的结果对象,也都一样。
hbase rest返回的结果都是字符串,在程序内部都是hbase相关的对象。第一步就是对象跟字符串的转换问题。
原生的hbase rest支持两种字符串格式的转换:一种是json,一种是xml。
hbase rest源码中json字符串与对象的转换使用的是jackson,xml格式的字符串与对象的转化用的是JAXB。
我根据源码抽取了四个工具方法,分别如下:
- 对象转化为json字符串
public static String toJson(Object object) {
ObjectMapper mapper = new JacksonJaxbJsonProvider().locateMapper(object.getClass(),
MediaType.APPLICATION_JSON_TYPE);
StringWriter writer = new StringWriter();
try {
mapper.writeValue(writer, object);
} catch (IOException e) {
e.printStackTrace();
}
return writer.toString();
}
- json字符串转化为对象
public static <T> T fromJson(String str, Class<T> c) {
ObjectMapper mapper = new JacksonJaxbJsonProvider().locateMapper(c,
MediaType.APPLICATION_JSON_TYPE);
T t = null;
try {
t = mapper.readValue(str, c);
} catch (IOException e) {
throw new RuntimeException(e);
}
return t;
}
- 对象转化为xml字符串
public static String toXML(Object object) {
try {
StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(object.getClass());
Marshaller marshal = context.createMarshaller();
marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshal.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshal.setProperty(Marshaller.JAXB_FRAGMENT, false);
marshal.setProperty("jaxb.encoding", "utf-8");
marshal.marshal(object, writer);
return new String(writer.getBuffer());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
- xml字符串转化为对象
private static <T> T fromXML(String xmlStr, Class<T> c) {
try {
JAXBContext context = new JAXBContextResolver().getContext(c);
Unmarshaller unmarshaller = context.createUnmarshaller();
T t = (T) unmarshaller.unmarshal(new StringReader(xmlStr));
return t;
} catch (JAXBException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
添加的maven依赖为:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-xc</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
</dependency>