栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Jackson将复杂的Json对象序列化为QueryString for HTTP Get?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Jackson将复杂的Json对象序列化为QueryString for HTTP Get?

好,

这是持有人对象:

public class ComplexJacksonObject extends baseJsonObject {    public int Start;    public int Count;    public Person MyPerson;    public List<String> Strings;    public class Person extends baseJsonObject {        public String Firstname;        public String Lastname;        public Address Where;    }    public class Address extends baseJsonObject {        public String Street;        public int Number;    }}

这是我如何初始化它:

ComplexJacksonObject cjo = new ComplexJacksonObject();cjo.Count = 1;cjo.Start = 2;cjo.Strings = new ArrayList<String>();cjo.Strings.add("One");cjo.Strings.add("Two");cjo.MyPerson = cjo.new Person();cjo.MyPerson.Firstname = "Fi",=[]{}rst";cjo.MyPerson.Lastname = "Last";cjo.MyPerson.Where = cjo.new Address();cjo.MyPerson.Where.Street = "Street";cjo.MyPerson.Where.Number = 15;String result = cjo.toQueryString();        // Strings=%5B%22One%22%2C%22Two%22%5D&MyPerson=%7BFirstname%3A"Fi%5C%5C%22%2C%3D%5B%5D%7B%7Drst"%2CLastname%3A%22Last%22%2CWhere%3A%7BStreet%3A%22Street%22%2CNumber%3A15%7D%7D&Start=2&Count=1

最后,使这种情况发生的方法:

public String toQueryString() {    StringBuilder sb = new StringBuilder();    for (Field field : this.getClass().getDeclaredFields()) {        if (sb.length() > 0) { sb.append("&");        }        Class cls = field.getType().getSuperclass();        // serializing my complex objects - they all inherit from baseJsonObject class        if (cls != null && cls.equals(baseJsonObject.class)) { baseJsonObject bjo = (baseJsonObject) getFieldValue(field); String str = toJson(bjo, true); sb.append(field.getName()).append("=").append(Uri.enpre(str));        }         // serializing lists, they are all List<T>        else if (field.getType().equals(List.class)) { List bjo = (List) getFieldValue(field); String val = toJson(bjo, false); sb.append(field.getName()).append("=").append(Uri.enpre(val));        }         // serializing simple fields        else { Object bjo = getFieldValue(field); String val = toJson(bjo, false).replaceAll("^"|"$", ""); sb.append(field.getName()).append("=").append(Uri.enpre(val));        }    }    return sb.toString();}private Object getFieldValue(Field field) {    try {        return field.get(this);    } catch (IllegalArgumentException e) {        e.printStackTrace();    } catch (IllegalAccessException e) {        e.printStackTrace();    }    return null;}private static ObjectMapper generateMapper() {    ObjectMapper om = new ObjectMapper();    // om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);    om.setDateFormat(new JacksonSimpleDateFormat());    return om;}public String toJson() {    try {        return generateMapper().writevalueAsString(this);    } catch (JsonProcessingException e) {        e.printStackTrace();        return null;    }}public String toJson(Object o, boolean noQuoteProperties) {    try {        ObjectMapper om = generateMapper();        if (noQuoteProperties) {      om.configure(com.fasterxml.jackson.core.JsonGenerator.Feature.QUOTE_FIELD_NAMES, false); om.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);        }        return om.writevalueAsString(o);    } catch (JsonProcessingException e) {        e.printStackTrace();        return null;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/455379.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号