Here is my Ajax code:
var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}]
};
$.ajax({
url : "ships",
data : myJSONObject,
success : function(data){
GLOBAL.player.startShooting(data);
},
error : function(data) {
console.log("error:", data);
},
dataType : "json",
timeout : 30000,
type : "post"
});
And here is my Java Servlet code:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("im in PSOT");
System.out.println(request.getParameter("myJSONObject"));
StringBuilder sb = new StringBuilder();
BufferedReader br = request.getReader();
String str;
while( (str = br.readLine()) != null ){
sb.append(str);
}
System.out.println(sb.toString());
response.setContentType("application/json");
response.getWriter().write("{\"key\":\"hello\",\"key2\":\"world\"}");
}
The Java servlet returns my Hello World object, but i CANNOT read data in Java Servlet
The console prints out the following:
im in PSOT
null
The last line is an empty string from last println.
I am using Tomcat 7
Can anyone please tell me what i am doing wrong and why i cannot read data in Java Servlet_
The parameter name is not
myJSONObject. That’s the JS variable name. The parameter names are all the root keys which you have there in your JSON object. E.g.You’d only need to manually parse it further. You could use Google Gson for this.
As to why the
Readerdidn’t return anything, that’s because the request body can be read and parsed only once. AnygetParameter()call will implicitly do that. So when you callgetParameter()beforegetReader(), you won’t be able to read the request body by theReader(the same applies for the other way round!). But you don’t need it anyway. Just usegetParameter()with the proper parameter names.