com.github.yongchristophertang.engine.java.handler.JsonTransformer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rest-connector Show documentation
Show all versions of rest-connector Show documentation
A test client framework for RESTful HTTP and Java APIs
/*
* Copyright 2014-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.yongchristophertang.engine.java.handler;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.jayway.jsonpath.JsonPath;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* Utility json transformation library
*
* @author Yong Tang
* @since 0.4
*/
public class JsonTransformer {
private final String context;
public JsonTransformer(String context) {
this.context = context;
}
/**
* Return the contained json string in this instance.
*
* @return contained json string.
*/
public String getContext() {
return context;
}
/**
* Parse the result into a sub part json via evaluation of expression. And create another {@link com.github
* .yongchristophertang.engine.web.ResultActions} instance which incorporate this json as response for further
* processing.
*
* @param expression the JSON path expression
*/
public JsonTransformer parse(String expression) {
Objects.nonNull(expression);
return new JsonTransformer(JsonPath.compile(expression).read(context).toString());
}
/**
* Transform the json result to an instance of T.
*
* @param clazz the type class of transformed object
*/
public T object(String expression, Class clazz) {
Objects.nonNull(expression);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
try {
return expression == null ? mapper.readValue(context, clazz) :
mapper.readValue(JsonPath.compile(expression).read(context).toString(), clazz);
} catch (Exception e) {
return clazz.cast(JsonPath.compile(expression).read(context));
}
}
/**
* Transform the json result to a list with T as its member class.
*
* @param clazz the type class of transformed list member object
*/
public List list(String expression, Class clazz) throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return expression == null ? mapper.readValue(context, TypeFactory.defaultInstance().constructCollectionType(
List.class, clazz)) : mapper.readValue(JsonPath.compile(expression).read(context).toString(),
TypeFactory.defaultInstance().constructCollectionType(
List.class, clazz));
}
/**
* Transform the json result to a map with K as its key class and V as its value class.
*
* @param keyClass the type class of transformed map key object
* @param valueClass the type class of transformed map value object
*/
public Map map(String expression, Class keyClass, Class valueClass) throws IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return expression == null ? mapper.readValue(context,
TypeFactory.defaultInstance().constructMapLikeType(Map.class, keyClass, valueClass)) :
mapper.readValue(JsonPath.compile(expression).read(context).toString(),
TypeFactory.defaultInstance().constructMapLikeType(Map.class, keyClass, valueClass));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy