我正在将一个对象列表作为json传回我的spring控制器,但是我还需要向它传递一些客户的详细信息,比如名字、姓氏、地址、付款类型——所以我想我为此创建了一个pojo,并将其作为请求参数传递,但运气不好。
Spring控制器:
@RequestMapping(value = "/addstock", method = RequestMethod.POST)
public @ResponseBody
String addPersons(@RequestBody StockList stock, @RequestParam(name="details") AddDetails details) throws ParseException, IOException
pojo是adddetails,它使用lombok具有getter/setter等。我尝试在javascript中传递以下内容:
function sendData() {
var stocks = JSON.stringify({'stocks': model.stock()});
var obj = { "firstname":"Steve", "lastname":"Green"};
obj = JSON.stringify({'details':obj});
$.ajax({
url:"/addstock?details="+obj,
type: 'POST',
data: stocks,
dataType: "html",
contentType: 'application/json',
mimeType: 'application/json',
success: function(data){
console.log(data);
return false;
}
});
}
但显然我不能把一个对象传递给details param。有没有别的办法?
非常感谢
更新
现在,我基本上为客户详细信息创建了另一个pojo,添加到stock json对象中:
例子:
function sendData() {
var adddetails = {firstname:"steve",lastname: "jack",add1:"6 redby lane",add2:"brixon",add3:"",city:"manchester",postcode:"b3434",tel:"0090909090"};
var stocks = JSON.stringify({'details':adddetails,'stocks': model.stock()});
$.ajax({
url:"/addstock",
type: 'POST',
data: stocks,
dataType: "html",
contentType: 'application/json',
mimeType: 'application/json',
success: function(data){
console.log(data);
return false;
}
});
return false;
}
@Getter
@Setter
public class AddDetails {
private String firstname, lastname,add1,add2,add3,postcode,tel;
}
@Getter
@Setter
public class StockList {
AddDetails details;
List<Stock> stocks;
}
@RequestMapping(value = "/addstock", method = RequestMethod.POST)
public @ResponseBody
String addPersons(@RequestBody StockList stock) throws ParseException, IOException {
try {
// perform add operation
stock.getStocks().forEach(s->System.out.println(s));
return "Successfully added stock.";
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
return "Error";
}
1条答案
按热度按时间xwbd5t1u1#
有几种方法可以做到这一点。第一种选择是移除
@RequestParam
annotation和spring将自动将查询字符串中的参数绑定到pojo。但是,在您的代码中,您将json表示附加到url,这是不可能的。这是您应该用于adddetails字段的正确语法:另一种可能的解决方案是定义一个dto,其中包含股票列表和adddetails对象,并将其作为请求主体传递。例如:
以及您的方法签名: