Как преобразовать Double в строку в выводе json

#java #json #spring-boot #double #response

#java #json #spring-boot #double #ответ

Вопрос:

У меня есть объект, который приведен ниже:

 public class Statics {
private Double sum;
private Double avg;
private Double max ;
private Double min ;
private Long count = Long.valueOf(0);//getter and setters and constructrures}
 

и у меня есть контроллер, который возвращает этот объект:

   @GetMapping("/statistics")
@ResponseStatus(HttpStatus.OK)
public ResponseEntity<?> getStatics(){

    return ResponseEntity.status(HttpStatus.OK).body(staticService.getStatics());
}
 

и реализация сервиса :

         private Statics statistics;
        
                public Statics getStatics() {
                if (statistics == null) {
                    Dou
    
    ble Zero =BigDecimal.valueOf(0.00).setScale(2, RoundingMode.HALF_UP).doubleValue();
                statistics = new Statics(Zero, Zero, Zero, Zero, Long.valueOf(0));
            }
            return statistics;
        }
 @Async
    public void statisticAnalysis() {

        DoubleSummaryStatistics stat = TRANSACTION_LIST.stream().mapToDouble(Transaction::getAmount)
                .summaryStatistics();
        statistics = new Statics(BigDecimal.valueOf(stat.getSum()).setScale(2, RoundingMode.HALF_UP).doubleValue(), BigDecimal.valueOf(stat.getAverage()).setScale(2, RoundingMode.HALF_UP).doubleValue(), BigDecimal.valueOf(stat.getMax()).setScale(2, RoundingMode.HALF_UP).doubleValue(), BigDecimal.valueOf(stat.getMin()).setScale(2, RoundingMode.HALF_UP).doubleValue(), stat.getCount());

    }
 

Я хочу, чтобы мой вывод был похож на ожидаемый в mage, который я прикреплю ниже, [«сумма»: «100» в двойных кавычках], но он всегда возвращает число без кавычек, что мне делать?
введите описание изображения здесь

Ответ №1:

Используйте String вместо Double того, чтобы выполнять вычисления при удвоении значения преобразования в String.ValueOf(sum) и присваивать значение вашему statistics POJO.

Конвертируйте POJO, как показано ниже

 public class Statics {
private String sum;
private String avg;
private String max;
private String min;
private Long count = Long.valueOf(0);//getter and setters and constructrures
}
 

Комментарии:

1. Я решил свою проблему, пожалуйста, проверьте другой ответ. кстати, спасибо.

2. @Nejatians Это решит вашу проблему, я согласен, но влияет на производительность при синтаксическом анализе JSON.

Ответ №2:

     public class Statics {
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Double sum;
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Double avg;
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Double max ;
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Double min ;
    private Long count = Long.valueOf(0);
}
 

Используя эту аннотацию: @JsonFormat(shape = JsonFormat.Shape.STRING)
Решена моя проблема!