【问题标题】:java convert POST form array to JSON object or POJO or mapjava 将 POST 表单数组转换为 JSON 对象或 POJO 或映射
【发布时间】:2015-09-04 10:30:05
【问题描述】:

我有以下格式的 POST 查询字符串:

param1=aaa&inners[0]["innerParam"]=bbb&inners[1]["innerParam"]=nnn

我需要轻松地将其转换为地图或 POJO。

public class pojo{
private String param1;

private List<OtherPojo> inners;//array is also ok

//getters etc
}

class OtherPojo{
private String innerParam.

//getters etc
}

我认为这可能是由 Jersey @BeanParam 或其他人完成的,但不幸的是这是不可能的。所以我只有一个字符串,需要将其编译为 map 或 pojo。请注意,我不清楚如何解析这个结构

inners[0]["innerParam"]

我不想手动操作。所以我需要在一行中解析它。

Pojo p=someHelper.compileToPojo(postString);// or map

使用哪个库(如果存在)?

【问题讨论】:

    标签: java forms http pojo


    【解决方案1】:

    您可以使用的库是:com.fasterxml.jackson

    这里是如何实现的:

    public void checkAndSetChildValues(ObjectNode node, String field, String value, ObjectMapper mapper) {
        int indexDot = field.indexOf('.');
        if (indexDot > -1) {
            String childFieldName = field.substring(0, indexDot);
            ObjectNode child = node.with(childFieldName);
            checkAndSetChildValues(child, field.substring(indexDot + 1), value, mapper);
        } else {
            try{
                node.set(field, mapper.convertValue(value, JsonNode.class));
            } catch(IllegalArgumentException ex){
                logger.debug("could not parse value {} for field {}", value, field);
            }
        }
    }
    
    
    public Object parse(Class type, String entityString) throws UnsupportedEncodingException {
    
        ObjectMapper mapper = mapperHolder.get();
        ObjectNode node = mapper.createObjectNode();
        Scanner s = new Scanner(entityString).useDelimiter("&|=");
        while (s.hasNext()) {
            String key = s.next();
            String value = s.hasNext() ? URLDecoder.decode(s.next(), "UTF-8") : null;
            checkAndSetChildValues(node, key, value, mapper);
        }
        Object result = mapper.convertValue(node, type);
        return result;
    }
    

    所以你应该能够实现自己的javax.ws.rs.ext.MessageBodyReadersee:https://jersey.java.net/documentation/latest/message-body-workers.html#d0e7151

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多