我有以下Spring控制器映射:
YES
如果我按下面的方式调用它,那么我得到400响应。
@RequestMapping(value="/isSomethingHappening", method = RequestMethod.POST)
public @ResponseBody JsonResponse isSomethingHappening(HttpServletRequest httpRequest,@RequestParam("employeeId") String employeeId,
ModelMap model) throws IOException{
但是如果我按照下面的方式调用它,那么我会得到成功的回复。
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};
看起来更合适的内容类型,因为我的请求数据是JSON对象。
<小时/> 另外,我还有其他实例,我的控制器映射如下:
application/json
为了调用它,我发送请求如下:
@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){
对数据进行字符串化,如果我不这样做,那么我将得到400.
一旦我进行了字符串化,那么它就变成了一个字符串,那么我的内容类型应该是JSON.stringify(requestData)
,但它适用于text/plain
请注意我知道代码修复,但我想了解这个概念。我已经阅读了this,并没有详细解释我的概念和查询。
答案 0 :(得分:1)
在Spring应用程序中使用Jackson库来处理JSON是很常见的。 如果您使用的是Ant,请尝试将Jackson添加到您的库中。
您可以直接从Maven Central下载Jackson图书馆。这是一个示例Maven依赖块(但获取最新版本):
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
确保Spring配置中有注释驱动标记:
<annotation-driven />
无论有没有Jackson,它也可能有助于指定控制器端点生成或使用JSON;
@RequestMapping(value="/getjson",
produces=MediaType.APPLICATION_JSON_VALUE, consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody MyObject getJSON(){
return new MyObject();
}