브라우저에서 PUT 메소드의 Java Servlet으로 JSON 배열을 보내려고합니다.PUT 요청에서 매개 변수를 가져 오는 방법은 무엇입니까?
내 아약스 요청 : 서버에서
$.ajax({
url : "./manageShoppingCart",
data : {
jsonArray : JSON.stringify(itemsArray)
},
type : 'PUT',
contentType : 'application/json'
}).done(function(rsp) {
console.log("done" + rsp);
}).fail(function(err) {
console.log("fail" + err);
});
합니다 (doPut의 방법)입니다 :
String jsonArray = request.getParameter("jsonArray"); // this is null
// but if I read from request stream I get the data
ServletInputStream inputStream = request.getInputStream();
String string = convertStreamToString(inputStream);
System.out.println(string); // jsonArray=%5B%7B%22itemId%22%3A%228003%22%2C%22itemQuantity%22%3A%2210%22%7D%2C%7B%22itemId%22%3A%228004%22%2C%22itemQuantity%22%3A%222%22%7D%5D
흥미로운 부분은 방법을 변경하고 POST로 보내는 경우 내가 얻을 수 있다는 것입니다 매개 변수를 올바르게 입력하십시오.
내 생각 엔 Tomcat 6은 PUT (URL 인코딩 .. 등)을 통해 매개 변수를 가져 오기 위해 일부 설정이 필요합니다.
그래서 PUT 메서드를 통해 JSON 배열을 올바르게 보내려면 어떻게해야합니까?
UPDATE : 나는이 그것을 할 수있는 올바른 방법인지 잘 모르겠지만, 나를 위해 내가 쉽게 자신에게 메시지에서 매개 변수 컨버터 작성 찾을 :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.ServletInputStream;
public class RequestsService {
public static String getDecodedMessage(ServletInputStream inputStream) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream));
String bodyMessageEncoded;
bodyMessageEncoded = bf.readLine();
String message = URLDecoder.decode(bodyMessageEncoded, "UTF-8");
return message;
}
public static String getParameter(String url, String paramName) throws ArrayIndexOutOfBoundsException {
Pattern pattern = Pattern.compile(paramName + "=[^&]*"); // regex for "paramName='anything unless is &'"
Matcher matcher = pattern.matcher(url);
matcher.find();
String value = matcher.group().split("=")[1];
return value;
}
public static String getParameterFromStream(ServletInputStream inputStream, String paramName) throws IOException {
String decodedMessage = getDecodedMessage(inputStream);
return getParameter(decodedMessage, paramName);
}
}