2015-09-04 17 views
2

我有POST查詢字符串的格式如下:的java轉換POST形式數組JSON對象或POJO或映射

參數1 = AAA &內部件[0] [ 「innerParam」] = BBB &內部件[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 
} 

我認爲這可能是由澤西@BeanParam或其他人完成的,但不幸的是這是不可能的。所以我只是有一個字符串,需要將其編譯爲map或pojo。請注意,我不清楚如何解析這種結構

inners[0]["innerParam"] 

我不想手動做。所以我需要在一行中解析它。

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

要使用哪個庫,如果存在?

回答

2

,你可以使用這個庫爲: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.MessageBodyReader見:https://jersey.java.net/documentation/latest/message-body-workers.html#d0e7151