Мое приложение использует Apace CXF для предоставления API-интерфейсов REST и использует jackson для маршалинга и демаршаллинга. В одной из конечных точек мы возвращаем обертку, которая является Map. Отображение десятичных знаков имеет решающее значение для этого приложения.
@XmlRootElement(name = "Output")
class Wrapper {
private Map<String, CountVO> data;
//constructor
//getter, setter
}
class CountVO {
private BigDecimal value;
//getter, setter, constructor
//updateMethod
public void updateValue(String userDecimalFormat){
switch(userDecimalFormat){
case "1":
this.value = BigDecimal.ZERO.setScale(1);
break;
case "2":
this.value = BigDecimal.ZERO.setScale(2);
break;
case "3":
this.value= BigDecimal.ZERO.setScale(3);
break;
}
}
}
Здесь значение по умолчанию установлено в 0 с десятичными точками на основе определенной конфигурации.
Я добавил тостринги и логгеры в соответствующих местах кода. Я мог видеть, что когда userDecimalFormat равен 1 или 2 или 3, я получаю желаемый результат, то есть счетчик равен 0,0, 0,00 или 0,000 соответственно, и то же самое печатается в журналах.
Но в тот момент, когда он конвертируется в формат json, я получаю желаемый результат только тогда, когда userDecimalFormat равен 2,3. Когда это 1, я получаю его как 0, а не как 0.0 в результирующем json. Вот фрагмент.
{
"Output": {
"data": {
"entry": [
{
"key": "1",
"value": {
"count": 0
}
},
{
"key": "2",
"value": {
"count": 0
}
}
]
}
}
}
В остальных случаях это выглядит следующим образом.
{
"Output": {
"data": {
"entry": [
{
"key": "1",
"value": {
"count": "0.00"
}
},
{
"key": "2",
"value": {
"count": "0.00"
}
}
]
}
}
}
Как вы предлагаете мне решить эту проблему?