hbase rest 源码解析 对象与字符串的互转

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>

猜你喜欢

转载自blog.csdn.net/lishuangzhe7047/article/details/78634570