【问题标题】:Angular JS $http.post method malforms JSON arraysAngular JS $http.post 方法使 JSON 数组格式错误
【发布时间】:2013-09-15 11:19:37
【问题描述】:

你好。

我有一个奇怪的问题,我整天都在努力解决。

我有我的 Angular JS 模块(应用程序)和一个控制器。在那个控制器中,我注入了一个工厂,它处理我的 $http.post 方法。 (我称之为“doSearch”)。到目前为止一切顺利。

在后端我有一个 spring-mvc rest api 类。它看起来像这样:

@Controller
@RequestMapping("/api/filesearch")
public class FileSearchAPI {

    @RequestMapping(value = "/search", method = RequestMethod.POST)
    @ResponseBody
    public ResultDTO doSearch(@RequestBody NewPerfectSearchDTO searchDTO) {
          System.out.println(searchDTO.getIdentifier());
          SolrService solrService = new SolrService();
          //return solrService.query(searchDTO);
          return new ResultDTO();
     }
}

这是发送一些 JSON 的函数,它将被映射到一个 JAVA POJO/DTO:

doSearch: function(searchParams) {
        $http.post("/np/api/filesearch/search", JSON.stringify({identifier: "apa", inputRows: []})).success(function(response) {
            console.log(response);
            return response;
        }).error(function(data, status, headers, config) {
                console.log(status, headers, config);
        });
    }

注意有效载荷(是的,在本示例中它是静态的): JSON.stringify({identifier: "apa", inputRows: []})

这在我的 DTO 中映射得非常好。字段正确,变量inputRows 是一个空的已初始化数组。

但是当我查看客户端发送到 API 的有效负载(使用 firebug 或 chrome 检查器)时, 它看起来像这样:{"identifier":"apa","inputRows":"[]"}

您注意到我的 JSON 数组周围的 "" 了吗?

{"identifier":"apa","inputRows":"[]"}
                                ^  ^
                                |  |

是的...这就是我遇到的问题。 当我发送该请求时,服务器只是回复HTTP 400,格式错误的语法(Tomcat/Spring 错误页面),该请求甚至不调用后端的 APIController。

所以,到目前为止我所尝试的(没有成功):

  • 我尝试过在有效载荷上不使用JSON.stringify(),使用 相同的结果
  • 我已尝试在我的 APIController 中指定标头(没有用,它甚至在抛出错误之前都不会执行该代码)
  • 我已尝试在 DTO 中使用 Java.util.List 而不是数组

所以我几乎被困在这里。任何帮助,将不胜感激。

【问题讨论】:

  • 我怀疑 stringify 可能有有趣的行为:stackoverflow.com/questions/710586/json-stringify-bizarreness
  • 你可以把数据作为对象传入,angularjs会自己序列化。尝试不使用 json.stringify 的方法
  • 请再读一遍这个问题,我已经说过我已经尝试过不使用 JSON.stringify,但我仍然得到相同的结果。 @钱德曼尼
  • 如果我尝试在浏览器控制台上执行JSON.stringify({test:[]}),我会得到"{"test":[]}"
  • 请记住,我们正在使用 AngularJS,当我根本不使用 JSON.stringify 时,它会给我同样的结果。我试过同时使用 Firefox 和 Chrome(最新版本,ECMAscript 5)。 @钱德曼尼

标签: java json spring spring-mvc angularjs


【解决方案1】:

听起来你有一个冲突的prototype.js依赖覆盖了一些函数。

我会试试的

delete Array.prototype.toJSON

在发布您的对象之前。

【讨论】:

  • 谢谢,成功了!我还没有检查旧的prototype.js 是否仍然包含在内……它是。以为不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 2017-11-05
  • 2018-07-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多