这是我发送的JSON:
{
"code": "400173258",
"name": "APPLE pie 2",
"onlinePrice": "800",
"mrp": "1000",
"validity": "123",
"videoConsultCount": "11",
"audioConsultCount": "11",
"textConsultCount": "11",
"audioVideoDuration": "15",
"textConsultValidityDays": 0,
"medicineIncluded": true,
"medicalTestDetail": null,
"description": "wOW",
"showOnWebsite": true,
"type": "MC"
}
这是我的控制者:
@RequestMapping("/edit")
@ResponseBody
public HealthPackageCRUDResponse editHealthPackage(@RequestBody AddEditHealthPackageForm healthPackageForm) {
HealthPackageCRUDResponse response = new HealthPackageCRUDResponse();
LybrateUser user = WebContextUtils.getCurrentUser();
if (user == null) {
LOG.info("user is not logged in.");
response.setSuccessful(false);
response.setMessage("Please login to create package.");
return response;
}
if (StringUtils.isEmpty(healthPackageForm.getCode())) {
LOG.info("Health package code is missing");
response.setSuccessful(false);
response.setMessage("There is no such package.");
return response;
}
HealthPackage healthPackage = healthPackageService.getHealthPackageByCode(healthPackageForm.getCode());
if (healthPackage != null && !HealthPackageStatus.DELETED.code().equalsIgnoreCase(healthPackage.getStatus()) && healthPackage.isEditable()) {
if (!healthPackage.getUser().getId().equals(user.getUser().getId())) {
response.setSuccessful(false);
response.setMessage("You are not authorized to edit this package.");
return response;
}
healthPackage = healthPackageService.editHealthPackage(healthPackage, healthPackageForm, user.getUser(), "Web", true, HealthPackgeType.MULTI_CONSULT_PACKAGE.code());
response.setSuccessful(true);
response.setMessage("Package Edited.");
response.setHealthPackage(healthPackageConverterService.healthPackageToHealthPackageDTO(healthPackage));
} else {
response.setSuccessful(false);
response.setMessage("Not able to create package");
}
return response;
}
这是RequestBody映射对象,它起作用:
public class AddEditHealthPackageForm implements Serializable {
private List<HealthPackageMediaDTO> mediaDTOs;
public AddEditHealthPackageForm(){
this.mediaDTOs = new ArrayList<HealthPackageMediaDTO>();
}
这是不起作用的版本:
(如果我将"mediaDTOs": []
添加到json对象)
public class AddEditHealthPackageForm implements Serializable {
private List<HealthPackageMediaDTO> mediaDTOs = new ArrayList<HealthPackageMediaDTO>(); // this is initialized outside the default constructor
public AddEditHealthPackageForm(){
// this is empty so it doesn't work (gives 400 Bad request syntactically incorrect request)
}
为什么会这样?如果在json中没有找到它,那么spring框架不应该只为mediaDTOs字段分配一个空值。当我在默认构造函数中初始化列表时,为什么它可以工作。它也适用于我根本不初始化它。如果我将"mediaDTOs": []
添加到json对象,它也可以工作。我不明白为什么这样一个基本的东西需要如此混乱?我在某个地方犯了一个愚蠢的错误吗?