【问题标题】:ModelAttribute is null模型属性为空
【发布时间】:2018-11-30 01:11:03
【问题描述】:

我用的是spring boot 2

控制器部分

@PostMapping("template/new/samplings")
@ResponseBody
public SamplingsDto save(@ModelAttribute SamplingsDto samplings) {
    return samplingsService.save(samplings);
}

我尝试保存表单

$("#samplingsForm").submit(function (e){
    e.preventDefault();

    var receptionDate =  $("#samplingsReceptionDatePicker").data('daterangepicker').startDate.format('YYYY-MM-DD');
    var buildDate =  $("#samplingsBuildDatePicker").data('daterangepicker').startDate.format('YYYY-MM-DD');

    var form = transForm.serialize('#samplingsForm');

    form.receptionDate=receptionDate;
    form.buildDate=buildDate;

    form = JSON.stringify(form);

    $.ajax({
        type:"post",
        url: "/template/new/samplings",
        data: form,
        contentType: "application/json",
        dataType : "json",
        success: function(data){
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
        }
    });

});

使用 chrome 请求有效载荷是

“{” "samplesId":"", "buildDate":"2018-06-20", "receptionDate":"2018-06-20", "productTypesId":"1", "productsId":"15", “}”

在服务器模型属性字段为空

编辑

public class SamplingsDto {

        private Integer samplingsId;

        private Integer productTypesId;

        private Integer productsId;

        private LocalDate receptionDate;

        private LocalDate buildDate;

        //get set
    }

【问题讨论】:

  • 你能分享SamplingsDto和从chrome形成的curl请求->检查->网络->右键单击请求->复制为curl吗?
  • 另外,查看this 了解使用@ModelAttribute 注释的最佳用例。
  • 您共享的SamplingsDto 是您的所有班级还是片段?
  • 对,你需要提供setter,让spring为这些属性赋值。
  • 只是一个片段..

标签: java ajax spring-mvc spring-boot


【解决方案1】:

首先,为 SamplingsDto 的属性添加 setter 和 getter。 (我也会使用 Lombok 作为 setter/getter)

public class SamplingsDto {
    private Integer samplingsId;

    private Integer productTypesId;

    private Integer productsId;

    private LocalDate receptionDate;

    private LocalDate buildDate;

    public Integer getSamplingsId() {
        return samplingsId;
    }

    public void setSamplingsId(Integer samplingsId) {
        this.samplingsId = samplingsId;
    }

    public Integer getProductTypesId() {
        return productTypesId;
    }

    public void setProductTypesId(Integer productTypesId) {
        this.productTypesId = productTypesId;
    }

    public Integer getProductsId() {
        return productsId;
    }

    public void setProductsId(Integer productsId) {
        this.productsId = productsId;
    }

    public LocalDate getReceptionDate() {
        return receptionDate;
    }

    public void setReceptionDate(LocalDate receptionDate) {
        this.receptionDate = receptionDate;
    }

    public LocalDate getBuildDate() {
        return buildDate;
    }

    public void setBuildDate(LocalDate buildDate) {
        this.buildDate = buildDate;
    }
}

那么你可以如下使用它:

@PostMapping("template/new/samplings")
public SamplingsDto save(@RequestBody SamplingsDto samplings) {
    return samplingsService.save(samplings);
}

【讨论】:

    【解决方案2】:

    您需要创建 REST Web 服务才能接收此请求。 添加 @RestController 注释并将标题设置为 application/json 。 我希望这能帮助您解决这里的问题。

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      相关资源
      最近更新 更多