所以我现在正在研究一个解决方案,其中我们有两个要求:
将ssn/电话号码格式化为连字符形式,否则当前显示时不带连字符。
将金额字段的格式设置为“$0.00”。
目前我们已经编写了一个formatashyphen和formatamount方法,如下所示:
/**
* This method converts the given string into US format SSN / Telephone number
* @param valueToFormat
* @param fieldToFormat , It should be either 'S' for SSN and 'T' for Mobile Number
* @return
*/
public String formatWithHyphen (String valueToFormat, String fieldToFormat) {
if(valueToFormat != null && valueToFormat.length() > 1) {
StringBuilder formattedValue = new StringBuilder(valueToFormat);
if(fieldToFormat.equalsIgnoreCase("S")) {
//format as SSN
formattedValue = formattedValue.insert(3, '-').insert(6, '-');
} else if(fieldToFormat.equalsIgnoreCase("T")) {
//format as telephone number
formattedValue = formattedValue.insert(3, '-').insert(7, '-');
}
return formattedValue.toString();
}
else {
return null;
}
}
/**
* This method converts a given amount string to a US $ formatted amount.
*
* @param amountToFormat
* @return
*/
public String formatAmount(String amountToFormat) {
try {
if(amountToFormat!=null && amountToFormat.length() > 0) {
Locale locale = new Locale("en", "US");
NumberFormat formatter = NumberFormat.getCurrencyInstance(locale);
return formatter.format(Double.parseDouble(amountToFormat));
}
else {
return null;
}
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
} catch (IllegalArgumentException iae) {
iae.printStackTrace();
}
return null;
}
现在的问题是:
有多个pojo类(tempassist、suppnutrition、childcare等),其中包含与金额和ssn/电话号码相关的字段
当我们从数据库中获取这些字段时,首先在相应的setter中设置未格式化的数据,然后在ui层通过getter()获取值,并对其应用上述两个函数,最后以json格式响应客户端。
这不是一个干净的解决方案,因为set发生了两次,而且代码中包含get和set。
我要找的是:
注解(例如, @Format(type="ssn")
我可以在pojo字段上应用它,这将确保任何被注解的字段都将使用连字符更新ssn。
这是一个不使用spring框架的web应用程序,因此不能实现任何关于spring的建议。
1条答案
按热度按时间gdx19jrr1#
创建一个扩展jsonserializer的类,然后在getter上使用@jsonserialize(using=myserializer.class)注解
其中一个序列化程序可能类似于: