解析Restlet中的表示

时间:2016-04-14 15:35:39

标签: java restlet

当我尝试放入JSONObject时,我收到了JSONException。

@Post
public String someCode(Representation rep) throws ResourceException{
    try {
        rep.getText();
    } catch (IOException e) {
        LOGGER.error("Error in receiving data from Social", e);
    }   

    try {
        JSONObject json = new JSONObject(rep);
        String username = json.getString("username");
        String password = json.getString("password");
        String firstname = json.getString("firstname");
        String lastname = json.getString("lastname");
        String phone = json.getString("phone");
        String email = json.getString("email");

        LOGGER.info("username: "+username); //JsonException
        LOGGER.info("password: "+password);
        LOGGER.info("firstname: "+firstname);
        LOGGER.info("lastname: "+lastname);
        LOGGER.info("phone: "+phone);
        LOGGER.info("email: "+email);

    } catch (JSONException e) {
        e.printStackTrace();
    } 

    return "200";
}

错误日志:

org.json.JSONException: JSONObject["username"] not found.
    at org.json.JSONObject.get(JSONObject.java:516)
    at org.json.JSONObject.getString(JSONObject.java:687)

注意:

当我尝试打印rep.getText()时,我会收到以下数据:

username=user1&password=222222&firstname=Kevin&lastname=Tak&phone=444444444&email=tka%40gmail.com

2 个答案:

答案 0 :(得分:1)

您的rep对象不是JSON对象。我实际上认为当你将它传递给JSONObject()时,它只捕获一个奇怪的字符串。我建议把它解析成一个数组:

Map<String, String> query_pairs = new LinkedHashMap<String, String>();
String query = rep.getText();
String[] pairs = query.split("&");
for (String pair : pairs) {
    int idx = pair.indexOf("=");
    query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8"));
}

答案 1 :(得分:1)

您在POST中接收的内容是HTTP表单编码数据而不是JSON。

Restlet可以并且确实处理这些对象本身提供Form对象与它们进行交互。而不是new JSONObject(String)尝试new Form(String),例如:

 String data = rep.getText();
 Form form = new Form(data);
 String username = form.getFirstValue("username");

我把剩下的作为练习留给读者。

或者,您需要调整提交数据的客户端以使用JSON对其进行编码,请参阅http://www.json.org/以获取此语法的说明。

作为参考,Form类在核心Restlet库中为org.restlet.data.Form