首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring MVC @NumberFormat(pattern = "#.###,##")错误模式

问Spring MVC @NumberFormat(pattern = "#.###,##")错误模式
EN

Stack Overflow用户
提问于 2019-06-26 17:50:29
回答 2查看 1.3K关注 0票数 0

我使用的是Spring MVC (4.3.3.RELEASE)。我的实体类有一个表单字段,我希望以spring的形式显示该字段: BigDecimal

代码语言:javascript
复制
<form:input path="number" />

as 1.000.000,11

我在字段上尝试了@NumberFormat(pattern = "#.###,##"),但出现了以下异常:

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

当我尝试查看表单时。

我的实体类是:

代码语言:javascript
复制
@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;
}
...
}

有没有方法以这个模式= "#.###,##“的形式查看?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-05 16:41:24

我的解决方案是:

代码语言:javascript
复制
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类中

代码语言:javascript
复制
@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(BigDecimal.class, new BigDecimalEditor());
}
票数 0
EN

Stack Overflow用户

发布于 2019-06-26 21:35:44

我相信@NumberFormat只支持英语区域设置。这篇文章对另一种Use Different Locale for @NumberFormat in Spring有一个很好的答案

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56769888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档