POST 请求未映射到 Spring MVC 控制器
POST request not getting mapped to Spring MVC Controller
我正在从 Angularjs $http 服务发送 POST 请求。当我的承诺如下所示并正确映射到 Spring Controller ,
时,它工作正常
service.js
reassignKsaPendingLeads : function(data,username)
{
var promise = $http({
url : "reassignPendingLeads.htm",
method : "POST",
data : mydata
})
.success(function(data, status, header, config, statusText)
{
}
}
Spring 控制器
@RequestMapping({ "reassignPendingLeads.htm" })
public @ResponseBody String updateAccessStatus(@RequestBody List<KsaLead> ksaLeads)
{
log.info("Inside updateAccessStatus");
return "true";
}
我从 service.js 传递的 json 对象正在正确映射到 @RequestBody 列表 ksaLeads。
由于 json 对象包含与 KsaLead 的 bean 属性相同的键。
但是现在我想传递另一个参数 username 除了 json body (data).
然后我得到 Request method 'POST' not supported in Spring Controller 。
新service.js
reassignKsaPendingLeads : function(data,username)
{
var mydata = JSON.stringify(data) + '&username=' + username;
var promise = $http({
url : "reassignPendingLeads.htm",
method : "POST",
data : mydata
})
.success(function(data, status, header, config, statusText)
{
}
新的Spring控制器
@RequestMapping({ "reassignPendingLeads.htm" })
public @ResponseBody String updateAccessStatus(@RequestBody List<KsaLead> ksaLeads,@RequestParam String username)
{
log.info("Inside updateAccessStatus");
return "true";
}
任何人都可以指导我如何从 angularJs 传递数据,以便它正确映射到 Spring Controller
我假设您想将用户名作为请求参数传递。为此,$http
可以有一个 params
输入字段:
function(data,username) {
var promise = $http({
url: "reassignPendingLeads.html",
method: "POST",
data: data,
params: { username: username }
})
// continue with your promise here
}
如果你想在请求正文中传递它,我们必须执行以下步骤:
我们必须将 username
添加到 mydata
对象。
// we assume that data is not a primitive type
function(data,username) {
var mydata;
// check if data is defined
if (data) {
// make a deep copy first, since we don't want to modify the input
mydata = angular.copy(data);
} else {
// if the data is undefined, create e new object
mydata = {};
}
// add the username to mydata
mydata.username = username;
var promise = $http({
url: "reassignPendingLeads.html",
method: "POST",
data: mydata
})
// continue with your promise here
}
在后端我们必须确保我们可以接受这种数据。为此,建议创建一个数据 class,其中包含用户名和可能出现在前端 data
对象上的任何其他字段。
大概是这样的:
public class MyDataClass {
private String username;
// other fields
// no args constructor
public MyDataClass() {}
// all args constructor
public MyDataClass(String username) {
this.username = username;
}
// getter and setters
}
现在我们修改控制器接受它:
@RequestMapping(value = "reassignPendingLeads.htm", method = RequestMethod.POST)
public @ResponseBody String updateAccessStatus(@RequestBody MyDataClass data)
{
log.info(data.getUsername());
return "true";
}
我正在从 Angularjs $http 服务发送 POST 请求。当我的承诺如下所示并正确映射到 Spring Controller ,
时,它工作正常service.js
reassignKsaPendingLeads : function(data,username)
{
var promise = $http({
url : "reassignPendingLeads.htm",
method : "POST",
data : mydata
})
.success(function(data, status, header, config, statusText)
{
}
}
Spring 控制器
@RequestMapping({ "reassignPendingLeads.htm" })
public @ResponseBody String updateAccessStatus(@RequestBody List<KsaLead> ksaLeads)
{
log.info("Inside updateAccessStatus");
return "true";
}
我从 service.js 传递的 json 对象正在正确映射到 @RequestBody 列表 ksaLeads。
由于 json 对象包含与 KsaLead 的 bean 属性相同的键。
但是现在我想传递另一个参数 username 除了 json body (data).
然后我得到 Request method 'POST' not supported in Spring Controller 。
新service.js
reassignKsaPendingLeads : function(data,username)
{
var mydata = JSON.stringify(data) + '&username=' + username;
var promise = $http({
url : "reassignPendingLeads.htm",
method : "POST",
data : mydata
})
.success(function(data, status, header, config, statusText)
{
}
新的Spring控制器
@RequestMapping({ "reassignPendingLeads.htm" })
public @ResponseBody String updateAccessStatus(@RequestBody List<KsaLead> ksaLeads,@RequestParam String username)
{
log.info("Inside updateAccessStatus");
return "true";
}
任何人都可以指导我如何从 angularJs 传递数据,以便它正确映射到 Spring Controller
我假设您想将用户名作为请求参数传递。为此,$http
可以有一个 params
输入字段:
function(data,username) {
var promise = $http({
url: "reassignPendingLeads.html",
method: "POST",
data: data,
params: { username: username }
})
// continue with your promise here
}
如果你想在请求正文中传递它,我们必须执行以下步骤:
我们必须将 username
添加到 mydata
对象。
// we assume that data is not a primitive type
function(data,username) {
var mydata;
// check if data is defined
if (data) {
// make a deep copy first, since we don't want to modify the input
mydata = angular.copy(data);
} else {
// if the data is undefined, create e new object
mydata = {};
}
// add the username to mydata
mydata.username = username;
var promise = $http({
url: "reassignPendingLeads.html",
method: "POST",
data: mydata
})
// continue with your promise here
}
在后端我们必须确保我们可以接受这种数据。为此,建议创建一个数据 class,其中包含用户名和可能出现在前端 data
对象上的任何其他字段。
大概是这样的:
public class MyDataClass {
private String username;
// other fields
// no args constructor
public MyDataClass() {}
// all args constructor
public MyDataClass(String username) {
this.username = username;
}
// getter and setters
}
现在我们修改控制器接受它:
@RequestMapping(value = "reassignPendingLeads.htm", method = RequestMethod.POST)
public @ResponseBody String updateAccessStatus(@RequestBody MyDataClass data)
{
log.info(data.getUsername());
return "true";
}