【问题标题】:Get JSON in POST request在 POST 请求中获取 JSON
【发布时间】:2018-11-14 21:07:14
【问题描述】:

我正在发送一个 POST 请求:

var arr = { State: 'Moscow', Age: 25 };
var url = "/google/modifiedPolygon";
$.ajax({
  url: url,
  type: 'POST',
  data: arr,
  contentType: 'application/json; charset=utf-8',
  dataType: 'json',
  async: false,
  success: function() {
      alert("msg");
  }
}); 

从后端处理为:

@RequestMapping(value="/modifiedPolygon",method = RequestMethod.POST,consumes = "application/json")
public void modifiedPolygon(@RequestBody JSONObject data, HttpServletRequest request, ModelMap model) {
    System.out.println(data);
}

但我收到以下错误:

org.springframework.http.converter.HttpMessageNotReadableException:
无法读取 JSON:无法识别的令牌“状态”:期待 (“真”、“假”或“空”)

【问题讨论】:

  • 您也未能通过传递 JSONObjectHttpServletRequest 来利用 Spring 的有用性,而不是让它转换为特定于数据的类。
  • @chrylis 你能再解释一下吗

标签: java json post request


【解决方案1】:

看起来 State 是服务端的布尔类型,但是您将 String 值作为 State 发送。因此,请验证 State the service exepcting 的数据类型。

【讨论】:

  • 我只是从前端发送示例数据并尝试在后端打印它。 State 没有数据类型。早些时候我写了 City 代替 state 它说的是 Unrecognized token 'City'
【解决方案2】:

我已经尝试了以下 Java 实现,它似乎工作正常。

@RequestMapping(value="/modifiedPolygon",method = RequestMethod.POST,consumes = "application/json")
public ResponseEntity<JSONObject> modifiedPolygon(@RequestBody JSONObject data, HttpServletRequest request, ModelMap model) {
    return new ResponseEntity<JSONObject>(data,HttpStatus.OK);
}

首先使用 POSTMAN 或 curl 进行测试,如果问题仍然存在,请尝试使用此方法。

var arr = { state: 'Moscow', age: 25 };
var url = "/google/modifiedPolygon";
$.ajax({
  url: url,
  type: 'POST',
  data: JSON.stringify(arr),
  contentType: 'application/json; charset=utf-8',
  dataType: 'json',
  async: false,
  success: function() {
      alert("msg");
  }
});

请启用 CORS 过滤器。

这是工作快照。

将此依赖添加到 pom.xml

<dependency>
          <groupId>com.googlecode.json-simple</groupId>
          <artifactId>json-simple</artifactId>
          <version>1.1.1</version>
      </dependency>

请在此处查找 java 代码更改

https://github.com/supun/Shopping/blob/master/src/main/java/com/shopping/controller/MainController.java

【讨论】:

  • OK下方有红线表示OK无法解析或不是字段
  • 只需从 spring 库中导入该类
  • 哪个类,建议中没有显示任何类
  • 现在它显示以下错误:org.springframework.http.converter.HttpMessageNotReadableException:无法读取 JSON:无法识别字段“状态”(类 org.json.JSONObject),未标记为可忽略(0已知属性:])
【解决方案3】:

你可以这样使用,

var arr = { state: 'Moscow', age: 25 };
var url = "/google/modifiedPolygon";
$.ajax({
  url: url,
  type: 'POST',
  data: { "dataValue": JSON.stringify(arr)},
  contentType: 'application/json; charset=utf-8',
  dataType: 'json',
  async: false,
  success: function() {
      alert("msg");
  }
});

现在,您可以从 body 参数中获取 backEnd 中的“dataValue”。

【讨论】:

  • 它给出了以下错误 org.springframework.http.converter.HttpMessageNotReadableException:无法读取 JSON:无法识别的令牌“dataValue”:期待(“true”、“false”或“null”)
  • 是的,应该是这样的数据:{"dataValue": JSON.stringify(arr)},
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 2019-02-23
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多