发送到后端的我的json对象如下所示:
$relation = ModelObject::where('status', '=', 1)
->with(['related_table' => function($query) {
$query->orderBy('field', 'asc|desc');
}])
->get()
前端电话:
{
"reportAccess":{
"report":{
"id":70,
"reportName":"Test Rapport",
"created":"2017-06-01",
"description":"Test report",
"modifiedDate":"2017-06-01T12:10:00.000+0000",
"modifiedBy":"111111"
},
"accessGroup":{
"id":1,
"accessName":"Administrator"
},
"validFromDate":"2017-07-24",
"validToDate":"2017-07-30"
},
"users":[
{
"id":111111,
"employeeNumber":"123456",
"firstName":"Test1",
"lastName":"Test11",
"windowsId":"t1234567"
},
{
"id":222222,
"employeeNumber":"7891011",
"firstName":"Test2",
"lastName":"Test22",
"windowsId":"t7891011"
}
]
}
后端,我有一个包装器,看起来像这样:
HolderWrapper.java
function addAccessForMultipleAgents(access, users) {
var holderWrapper = {
reportAccess: access,
users: users
};
return utils.post('/api/v1/reportAccesses/all', holderWrapper);
}
ReportAccessCustom.java
public class HolderWrapper {
private List<User> users;
private ReportAccessCustom reportAccess;
public HolderWrapper() {
}
public HolderWrapper(List<User> users, ReportAccessCustom reportAccess) {
this.users = users;
this.reportAccess = reportAccess;
}
public List<User> getUsers() {
return users;
}
public ReportAccessCustom getReportAccess() {
return reportAccess;
}
@Override
public String toString() {
return "HolderWrapper{" +
"users=" + users +
", reportAccess=" + reportAccess +
'}';
}
}
处理POST请求的代码:
public class ReportAccessCustom {
private Report report;
private AccessGroup accessGroup;
private Date validFromDate;
private Date validToDate;
public Report getReport() {
return report;
}
public AccessGroup getAccessGroup() {
return accessGroup;
}
public Date getValidFromDate() {
return validFromDate;
}
public Date getValidToDate() {
return validToDate;
}
}
这一切都给我留下了错误信息:
@RequestMapping(value = "", method = RequestMethod.POST)
public List<ReportAccess> createMultipleAccesses(@RequestBody Map<String, Object> holderWrapper) {
List<ReportAccess> response = new ArrayList<>();
HolderWrapper hw = new HolderWrapper((ArrayList<User>) holderWrapper.get("users"), (ReportAccessCustom) holderWrapper.get("reportAccess"));
List<User> users = hw.getUsers();
ReportAccessCustom reportAccessCustom = hw.getReportAccess();
//rest of code..
return response;
}
任何帮助,为什么这种失败将非常感激。
答案 0 :(得分:1)
您的有效负载中存在拼写错误。它有一个用于reportAccess的双{
:
{
"reportAccess": {
{ <--- REMOVE THIS AND ...
"report": {
"id": 70,
...
},
"accessGroup": {
"id": 1,
...
},
"validFromDate": "2017-07-24",
"validToDate": "2017-07-30"
} <--- ... THIS ONE TOO
},
"users": [
{
"id": 111111,
...
},
{
"id": 222222,
...
}
]
}
顺便说一句,您不需要为您的请求体使用Map,您可以直接使用HolderWrapper:
@RequestMapping(value = "", method = RequestMethod.POST)
public List<ReportAccess> createMultipleAccesses(@RequestBody HolderWrapper holderWrapper) {
....
}