Отправка как строки запроса, так и тела JSON в HTTP-запросе Почта на сервер возможна, это то, что я уже понял.Для этого нам нужно переопределить методы getReader и getInputstream класса HttpServletRequestWrapper.Я сделал это, как изучено в этой ссылке .Видел похожие ответы и в Stack Overflow.
Так что сейчас у меня есть действие входа в систему, где нет тела, только параметры строки запроса, поступающие в post.В то время как я пытаюсь прочитать их, я получаю нулевое значение в качестве вывода для getParameter ().В моей оболочке я печатаю захваченное тело, и оно показывает правильные данные, полученные с клиентского компьютера.
Тривиальные методы чтения запроса String (getParameter()
) и тела JSON (gson.fromJson), которыеиспользуется во время чтения из unWrapped HttpRequest может быть использован и для обернутого HTTP-запроса?Что мне здесь не хватает?
POST метод сервлета
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("from doPost");
RequestWrapper wrappedrequest = new RequestWrapper(request);
request = wrappedrequest;
String action= request.getParameter("action");
if(action.equals("update")) {
Gson gson = new Gson();
Order cart = gson.fromJson(request.getReader(), Order.class);
CartDao dao= new CartDao(cart);
dao.addData();
}else if(action.equals("login")) {
loginDao ld = new loginDao(request);
int roleId = ld.authenticate();
if(roleId!=-1) {
System.out.println("Role ID Got is "+ roleId);
HttpSession session = ld.loadSession(roleId);
System.out.println("Init page for logging in user is = "+ session.getAttribute("initPage").toString());
CartDao dao= new CartDao();
JsonArray responseJson= dao.getOrderList();
request.setAttribute("ResponseJson", responseJson);
RequestDispatcher rq = request.getRequestDispatcher(session.getAttribute("initPage").toString());
rq.forward(request, response);
}else {
request.setAttribute("errmsg", "Invalid username/password");
RequestDispatcher rq = request.getRequestDispatcher("login.jsp");
rq.forward(request, response);
}
}else {
System.out.println("No Action");
}
}
RequestWrapper
public class RequestWrapper extends HttpServletRequestWrapper {
private String _body;
public RequestWrapper(HttpServletRequest request) throws IOException {
super(request);
_body = "";
BufferedReader bufferedReader = request.getReader();
String line;
while ((line = bufferedReader.readLine()) != null){
_body += line; //when i print this it shows proper data got from client machine
}
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(_body.getBytes());
return new ServletInputStream() {
public int read() throws IOException {
return byteArrayInputStream.read();
}
@Override
public boolean isFinished() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isReady() {
// TODO Auto-generated method stub
return false;
}
@Override
public void setReadListener(ReadListener arg0) {
// TODO Auto-generated method stub
}
};
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(this.getInputStream()));
}