gpt4 book ai didi

java - Spring Controller 400错误请求和application/x-www-form-urlencov/s application/json

转载 作者:行者123 更新时间:2023-12-01 10:08:00 25 4
gpt4 key购买 nike

我有以下 Spring Controller 映射:

@RequestMapping(value="/isSomethingHappening", method = RequestMethod.POST)
public @ResponseBody JsonResponse isSomethingHappening(HttpServletRequest httpRequest,@RequestParam("employeeId") String employeeId,
ModelMap model) throws IOException{

如果我按如下方式调用它,我会得到 400 响应。

var requestData = {"employeeId":XYZ.application.employeeId};

XYZ.network.fireAjaxRequestAsync("application/json", "forms/testing/isSomethingHappening", requestData, function(response, status, xhr){

但是如果我按如下方式调用它,那么我会得到成功响应。

var requestData = {"employeeId":XYZ.application.employeeId};

XYZ.network.fireAjaxRequestAsync("application/x-www-form-urlencoded", "forms/testing/isSomethingHappening", requestData, function(response, status, xhr){

我找到了修复方法,但我无法理解为什么当我的请求数据对象 var requestData = {"employeeId":XYZ.application.employeeId}; 时第一个给了我错误保持不变,我只是更改了内容类型。 对我来说application/json看起来更合适的内容类型,因为我的请求数据是 JSON 对象。

<小时/>另外,我还有其他实例,其中我的 Controller 映射如下:

@RequestMapping(value = "/getOnFlyResults", method = RequestMethod.POST)
public @ResponseBody JsonResponse getOnFlyResults(HttpServletRequest httpRequest,
@RequestBody testingRequestVO testingRequestVO, ModelMap modelMap) throws IOException{

为了调用它,我发送如下请求:

var requestData = {"employeeId":XYZ.application.employeeId,
"fName":XYZ.application.fName,
"lName": XYZ.application.lName,
"telephoneNumber":telephoneNumber,
"testMode":XYZ.constant.onFly};

XYZ.network.fireAjaxRequestAsync("application/json", "forms/testing/startTest", JSON.stringify(requestData), function(response, status, xhr){

我不明白为什么我必须使用 JSON.stringify(requestData) 对数据进行字符串化,如果我不这样做,我将得到 400。

一旦我进行字符串化,它就会变成字符串,那么我的内容类型应该是 text/plain但它适用于 application/json

请注意,我知道代码修复,但我想了解这个概念。我已阅读this它没有详细解释这个概念和我的疑问。

最佳答案

在 Spring 应用程序中使用 Jackson 库来处理 JSON 是很常见的。如果您使用 Ant,请尝试将 Jackson 添加到您的库中。

您可以直接从 Maven Central 下载 Jackson 库。下面是一个 Maven 依赖 block 示例(但获取最新版本):

<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>

确保 Spring 配置中有注释驱动标签:

<annotation-driven />

无论有没有 Jackson,它也可能有助于指定 Controller 端点生成或使用 JSON;

@RequestMapping(value="/getjson", 
produces=MediaType.APPLICATION_JSON_VALUE, consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody MyObject getJSON(){
return new MyObject();
}

关于java - Spring Controller 400错误请求和application/x-www-form-urlencov/s application/json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36322253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com