当List在默认构造函数之外初始化时,Spring发送400个错误响应,在其中初始化或根本没有初始化时工作

时间:2015-09-23 16:51:01

标签: java spring spring-mvc

这是我发送的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对象,它也可以工作。我不明白为什么这样一个基本的东西需要如此混乱?我在某个地方犯了一个愚蠢的错误吗?

0 个答案:

没有答案