我想从HttpServletRequest获取Json键值。
我的Java代码如下所示
import java.io.BufferedReader;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.HTTP;
import org.json.JSONException;
import org.json.JSONObject;
@WebServlet("/Service")
public class Service extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, JSONException {
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null) {
jb.append(line);
}
} catch (Exception e) {
}
try {
JSONObject jsonObject = HTTP.toJSONObject(jb.toString());
String email = jsonObject.getString("email");
} catch (Exception e) {
}
}
}
发布JSON
{
"email": "test@xyz.com",
"fname": "test01"
}
我使用JSONObject jsonObject = HTTP.toJSONObject(jb.toString());
{"\"test@xyz.com\",\t\"fname\"":"\"test01\"}","Request-URI":"email","Method":"{","HTTP-Version":":"}
使用String email = jsonObject.getString("email");
我正在使用Eclipse Mars 1使用JAVA。
答案 0 :(得分:-1)
你如何传递你的json?
如果您将其作为Content-Type: application/x-www-form-urlencoded
传递,那么上述内容将不起作用 - 您应该使用类似
JSONObject jObj = new JSONObject(request.getParameter("mydata"));
其中mydata
是HTML表单字段的名称。
如果您使用Content-Type: application/json
,则您提供的代码应该有效。你能证实吗?
无论如何,在servlet中输出jb.toString()
的内容是值得的,因此如果它已经无效,你可以在尝试将其解析为JSON之前看到它的内容。
如果您可以使用curl,请使用以下代码测试您的代码:
curl http://localhost:8080/ -H "Content-Type: application/json" -X POST -d '{"email": "test@xyz.com","fname": "test01"}'
或下面最后一个参考中的代码。
参考文献: