如何在服务器中接收表单参数值?

时间:2018-04-05 12:58:04

标签: java server httprequest axios

我有React JS应用程序,我发送邮件请求到服务器,并使用axios库提交表单。

客户请求:

sendData(data,price) {
    axios.post('http://localhost:8080/SampleJavaAPP/UserServer', {
    item: data,//these value
    price:price//these value
  })
  .then(function (response) {
      console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });
  }

我不知道如何将这些值输入服务器我正在服务器中为此获取价值

String name = request.getParameter("item");
        String price = request.getParameter("price");

        System.out.println("Result "+name + price);

但是它在服务器中给出了null值。如何在服务器中接收这些值参数?

3 个答案:

答案 0 :(得分:1)

request.getParameter()未检索到Request Body。您需要通过request.getReader()检索它。

String body = IOUtils.toString(request.getReader());

建议先使用 Apache Commons IO 来获取内容。因为您的请求是JSON格式。您可以使用 Jackson 将字符串转换为地图。

Map<String, String> map = mapper.readValue(body, new TypeReference<Map<String, String>>(){});
System.out.println(map.get("item"));
System.out.println(map.get("price"));

答案 1 :(得分:0)

request.getParameter()指的是网址参数 - &gt; myurl?someparameter=1

通过执行request.getParameter("item"),您的网址需要看起来像http://localhost:8080/SampleJavaAPP/UserServer?item=myitem

你在这里做的是什么

sendData(data,price) {
    axios.post('http://localhost:8080/SampleJavaAPP/UserServer', {
    item: data,//these value
    price:price//these value
}

将对象添加到请求正文,这是恕我直言。因为您在服务器端请求对象上找不到任何参数itemprice

您需要做的是解析请求正文。使用request.getInputStream(),您可以获得Inputstream。我建议你使用一个对象映射器,这使得它非常简单。见Intro to the Jackson ObjectMapper

在你的servlet中,你做这样的事情:

ObjectMapper objectMapper = new ObjectMapper();
MyItem myItem = objectMapper.readValue(request.getInputStream(), MyItem.class);

public class MyItem{

    String price;
    String item;

    public void setItem(String item) {
        this.item = item;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getItem() {
        return item;
    }

    public String getPrice() {
        return price;
    }

}

答案 2 :(得分:0)

由于Axios发送Json数据,您将无法直接阅读。 有两种可能的解决方案:

  1. 将数据作为表单数据发送。

  2. 阅读&amp;在servlet上解析JSON:

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
                                          throws ServletException, IOException {    
        StringBuffer jb = new StringBuffer();
        String line = null;
        try {
            BufferedReader reader = request.getReader();
            while ((line = reader.readLine()) != null) {
                jb.append(line);
            }
        } catch (Exception e) { /*report an error*/ }
    
        try {
            JSONObject jsonObject =  HTTP.toJSONObject(jb.toString());
            String price = jsonObject.get("price"); // will return price value.
        } catch (JSONException e) {
            throw new IOException("Error parsing JSON request string");
        }
    }