【问题标题】:Returning JSON response from spring controller goes as html instead of JSON in javascript从 spring 控制器返回 JSON 响应以 html 而不是 javascript 中的 JSON
【发布时间】:2018-10-14 01:46:51
【问题描述】:

我有一个 spring 控制器,它正在向我的脚本中的 ajax 调用发送 JSON 响应。我在控制器方法中使用了@ResponseBody,它在通过ajax调用调用时直接发送JSON作为响应。

当我添加 JsonSanitizer.sanitize(myJsonString) 后,它在 ajax 响应中返回为 html 而不是 JSON。因此,我现在无法解析 json 对象。

示例代码:

@ResponseBody
@RequestMapping(value="/getJson" method="GET")
public String fetchJsonDetails(MyObj obj) {
//DB call based on my object..
//Previously added
//return new Gson().toJson(obj);
//New line added now
return JsonSanitizer.sanitize(new Gson().toJson(obj));

}

在上面添加新行之后,响应是 html 而不是 JSON。

请建议我实现这一目标,如果有任何需要,请告诉我。

提前致谢。

【问题讨论】:

  • 如何检查输出是否为 html ?
  • 当我对 Ajax 响应发出警报时,我得到的是 html,但我无法使用 JSON.parse 方法解析该响应 obj。
  • 它正在工作。我的错,我认为 Json 没有被退回。它正在返回 Json,但格式不正确。我已经在脚本中更改了它,现在一切正常。谢谢@NayoR
  • 能否发布您是如何解决问题的(如果您忘记添加一些信息,请更新它)?可以帮助别人;)
  • 实际上在返回的格式中,我已经检查了值。当我在服务器端使用 enocde.forjavascript 时,它有一些额外的编码值。我只是替换了脚本中的编码值,并将其转换回有效的 Json。然后我使用 JSON.parse 方法传递它并访问所有这些值。

标签: spring owasp


【解决方案1】:

您可以指定退货的类型:

@ResponseBody
@GetMapping(value="/getJson", produces="application/json")
public String fetchJsonDetails(MyObj obj) {
    // DB Call
    return JsonSanitizer.sanitize(new Gson().toJson(obj));
}

你也可以使用

import org.springframework.http.MediaType;
...
@GetMapping(value="/getJson", produces=MediaType.APPLICATION_JSON_VALUE)

【讨论】:

  • 感谢 NayoR,但我需要清理 json 对象。该消毒剂通过作为 JSON 发送来制造问题。
  • @VijayaragavanV 好的,我已经编辑了我的答案。将produces="application/json" 添加到映射注释是否可以解决您的问题?
  • 不,它不起作用。仍然面临同样的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 2021-10-19
  • 2018-10-26
  • 2013-09-20
相关资源
最近更新 更多