当前位置: 首页 > 知识库问答 >
问题:

如何在Spring mvc中将空数字字段绑定到默认值0

傅峻
2023-03-14

我的jsp表单中有一些数字字段(但不是强制的),例如kkqty、sogoqty和sesaqty。因此,当用户没有在这些字段中输入任何内容时,我在控制器端接收到null,因此在保存这些表单数据时会出现Null属性异常

我的POJO(OutletInfo.java)

 private Double kkqty;
 private Double sogoqty;
 private Double sesaqty;

//getter & setters

@Column(name = "KKqty", nullable = false, precision = 10)
public Double getKkqty() {
    return this.kkqty;
}

public void setKkqty(Double kkqty) {
    this.kkqty = kkqty;
}

@Column(name = "sogoqty", nullable = false, precision = 10)
public Double getSogoqty() {
    return this.sogoqty;
}

public void setSogoqty(Double sogoqty) {
    this.sogoqty = sogoqty;
}

@Column(name = "sesaqty", nullable = false, precision = 10)
public Double getSesaqty() {
    return this.sesaqty;
}

我的控制器

@RequestMapping(value = "saveOutletInfo", method = RequestMethod.POST)
public @ResponseBody String saveOutletInfo(OutletInfo outletInfo,HttpServletRequest request){

    System.out.print("KKQTY:"+outletInfo.getKkqty());               
    return this.getMasterService().saveOutletInfo(outletInfo);      
}

在控制器中,当我尝试打印所有数值字段时,我在这里收到空值,因此无法保存。

我需要将null转换为默认值0.0,我知道我需要检查所有字段,如果null,然后将其设置为0.0,但这几乎是硬编码的,所以我希望在这种情况下自动转换。

我浏览了一些帖子,并遇到了@InitBinder但在这种情况下我无法使用它。

类似的东西

@InitBinder
公共无效的初始化编辑器(WebDataBinder binder) {
binder.register自定义编辑器(双.class,新的自定义编号编辑器(双.class,真));
}

任何人都可以建议我如何在空时自动将我的所有数值字段转换为0.0。

共有1个答案

简烨烁
2023-03-14

您可以设置一个全局初始化绑定器,例如

@ControllerAdvice
public class GlobalBindingInitializer {

 /* global InitBinder  */

 @InitBinder
 public void binder(WebDataBinder binder) {
  binder.registerCustomEditor(Double.class, new CustomDoubleEditor());
 }
}

并注册以下编辑器

public class CustomDoubleEditor extends PropertyEditorSupport {
    public CustomDoubleEditor() {
    }

    public String getAsText() {
        Double d = (Double) getValue();
        return d.toString();
    }

    public void setAsText(String str) {
        if (str == "" || str == null)
            setValue(0);
        else
            setValue(Double.parseDouble(str));
    }
} 

然而,在您的上下文中,一个更合适的解决方案似乎是简单地初始化实例变量或将默认构造函数的值设置为0

private Double kkqty = 0.0;
private Double sogoqty = 0.0;
private Double sesaqty = 0.0;
 类似资料:
  • 我有一个Spring Boot服务,它为POST请求正文使用自定义POJO类。当客户端将其中一个字段传递为null时,我希望该值设置为0。 由以下控制器使用: Spring boot将为我处理从JSON到的数据绑定,但是每当作为null传递时,我希望它保留0。有没有正确的方法来做到这一点,或者我必须自己解析类并设置值?目前,如果客户端在其请求JSON中没有传递此字段,它将保留默认值,但是,我希望即

  • 问题内容: 我在设置Avro字段的默认值时遇到了一些问题。我有一个简单的架构,如下所示: data.avsc: 我正在使用 avro-maven-plugin v1.7.6 生成Java模型。 当我使用:创建模型的实例时 ,它会失败并出现以下异常: org.apache.avro.AvroRuntimeException:org.apache.avro.AvroRuntimeException:字

  • 我在设置Avro字段的默认值时遇到了一些问题。我有一个简单的模式,如下所示: 数据avsc: 我使用的是avro maven插件v1。7.6生成Java模型。 当我使用:创建模型的实例时,它会失败,但有一个异常: org.apache.avro.AvroRuntimeExc0019:org.apache.avro.AvroRuntimeExc0019:字段id类型: UNION pos: 0未设置

  • 问题内容: 我似乎找不到或编写一个选择默认值的sqlquery (我不认为我可以在phpmyadmin中生成它供我复制) 我试图选择它,就好像它是一条记录,但无济于事… 问题答案: 或者我认为更好: 更新-更正 正如@Jeff Caron所指出的,只有在中至少有1行时,上述内容才有效。如果即使分组表没有行也要得到结果,则可以使用以下命令:

  • 我希望在给定空字符串时使用默认值。我希望有更优雅的东西,然后使用if语句检查<code>$Var 下面是我试图完成的一个片段。给定一个空字符串,我希望它打印“Var: DEFAULT”。

  • 我试图设置可变投掷SpEL在Spring启动应用程序: 应该来自应用程序-{profile}。财产。但是字段始终为空,即使已存在。 带有的代码可以正常工作,但包含空字符串。 我的问题是,如果使用SpEL的属性不存在,如何将null设置为variable。 upd:值来自特定于配置文件的属性文件