在 JDK 1.8 上使用 Spring 4.1.7,我有一个如下所示的 @RestController 类:
@RestController
public class ServiceAController {
public static final Logger LOG = Logger.getLogger(ServiceAController.class);
@RequestMapping(value="/rest/servicea", method=RequestMethod.POST)
public ServiceAResponse serviceA(@RequestParam(value="parmA", defaultValue="defaultParmA") String parmA,
@RequestParam(value="parmB", defaultValue="defaultParmB") String parmB,
@RequestParam(value="parmC", defaultValue="defaulParmC") String parmC) {
LOG.info("Inside Service A handler: " + parmA + " B: "+ parmB + " C: "+ parmC);
}
当我从这样的 javascript 向 /rest/servicea 发送 POST 时,一切正常,我在日志中看到值“a”、“b”和“c”:
var data = {
"parmA": "a",
"parmB": "b",
"parmC": "c"
}
$.ajax({
type: "POST",
url: "./rest/servicea",
contentType: "application/x-www-form-urlencoded",
data: data,
dataType: "json",
success: submitAuthSuccess,
error: submitAuthFailure
})
但是,当我尝试将调用从 javascript 更改为此(将协议更改为 REST 而不是 www-urlencode)时,我在日志中获得了默认值(defaultParmA、defaultParmB、defaultParmC):
var data = {
"parmA": "a",
"parmB": "b",
"parmC": "c"
}
$.ajax({
type: "POST",
url: "./rest/servicea",
contentType: "application/json",
data: JSON.stringify(data),
dataType: "json",
success: submitAuthSuccess,
error: submitAuthFailure
})
我想我在 @RestController 类中遗漏了一些东西来让它解析 JSON,而不是期待 www-urlencoded 数据。
我尝试更改方法@RequestMapping
上的注释serviceA
以添加consumes="application/json"
属性,但这没有效果。
在 POST 正文中使用 JSON 而不是 urlencoded 数据,我可以进行哪些更改来完成这项工作?