当我尝试放入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
答案 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
。