Spring MVC @NumberFormat(pattern =“#。###,##”)格式错误

时间:2019-06-26 09:50:29

标签: java spring forms spring-mvc

我正在使用Spring MVC(4.3.3.RELEASE)。我的Entity类有一个BigDecimal字段,我想以spring形式显示:form

<form:input path="number" />

为1.000.000,11

我在字段上尝试了@NumberFormat(pattern =“#。###,##”),但我有以下例外情况:

org.springframework.core.convert.ConversionFailedException:无法从类型@ javax.validation.constraints.NotNull @ org.springframework.format.annotation.NumberFormat java.math.BigDecimal转换为java.lang.String类型的值'100000000000.22';嵌套异常是java.lang.IllegalArgumentException:格式错误的“#。###,##”

当我尝试查看表单时。

我的实体类是:

@Entity
@Table(name="test")
public class Test {
private BigDecimal number;
...

@NumberFormat(pattern =  "#.###,##")
@Column(name="number")
public BigDecimal getNumber() {
    return number;
}
public void setNumber(BigDecimal number) {
    this.number = number;
}
...
}

是否有一种方法可以查看此模式=“#。###,##”?

2 个答案:

答案 0 :(得分:0)

我相信@NumberFormat仅支持英语语言环境。这篇文章为替代Use Different Locale for @NumberFormat in Spring

提供了很好的答案

答案 1 :(得分:0)

我解决:

public class BigDecimalEditor extends PropertyEditorSupport {

private static Logger logger = Logger.getLogger(BigDecimalEditor.class);

@Override
public String getAsText() {
    String s = null;
    if (getValue() != null) {
        BigDecimal bd = (BigDecimal) getValue();
        DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.GERMAN);
        df.setParseBigDecimal(true);
        s = df.format(bd);
    }
    return s;
}

@Override
public void setAsText(String text) throws IllegalArgumentException {
    DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.GERMAN);
    df.setParseBigDecimal(true);
    BigDecimal bd = null;
    try {
        bd = (BigDecimal) df.parseObject(text);
    } catch (ParseException e) {
        logger.error("setAsText error", e);
        setValue(null);
    }
    setValue(bd);
}

}

和@Controller类中的

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(BigDecimal.class, new BigDecimalEditor());
}