【问题标题】:How to create JSON object from primitive type in Spring Framework?如何在 Spring Framework 中从原始类型创建 JSON 对象?
【发布时间】:2019-12-16 17:27:11
【问题描述】:

我有一些数据的实体,有字段price

我有获取所有项目价格总和的方法。 如果此方法返回 Double,我应该如何实现控制器方法以在 Json 中获取它?

@GetMapping("/sum")
    public ResponseEntity<Double> getSum(){
        return ResponseEntity.status(HttpStatus.OK).body(productService.getSum());
    }

通过这种方法,我收到没有 JSON 结构的数字作为响应。

假设我们有:123456.0

但我们需要:

{
  "sum" : 123456.0
}

【问题讨论】:

  • 创建一个类,其属性名为 sum,类型为 double。并返回一个 ResponseEntity.
  • @JBNizet 那么这只是一种方法吗?
  • 不,不是。课堂简单吗?这是一件好事:简单就是好的。如果您必须返回其他值(aferage、百分位数等),那么您将向该类添加属性。
  • ResponseEntity 在你想动态返回其他状态码时很有用(如果它总是一样,那么你可以使用 ResponseStatus 注解),或者当你想添加标题,或设置内容类型时,等等。看看它的javadoc。
  • 是的,它是一个 DTO,因为它的目的是传输数据。

标签: java json spring spring-boot


【解决方案1】:
class ThatCustomClass {
 BigDecimal sum;
}

有不同的方法可以做到这一点。按我的喜好降序排列

  1. 回复ResponseEntity&lt;ThatCustomClass&gt;

    @JBNizet 已经解释过了

  2. 使用 ThatCustomClass 响应。然后使用 controllerAdvices 和 Exceptions 发送除 200 以外的任何内容

  3. 使用 HashMap 而不是 DTO
  4. 使用字符串操作来创建 JSON 字符串(我什至不知道为什么我在这里列出了这个选项)

顺便说一句,对于货币操作不要使用 Double/Float,而是使用 BigDecimal http://java-performance.info/bigdecimal-vs-double-in-financial-calculations/

【讨论】:

  • 哦,真的,我可以使用地图...谢谢)为什么是controllerAdvice?例如,我仅在自定义异常类下使用 @ResponseStatus(HttpStatus.FOUND)
  • @andrew17,是的,你是对的,注释 CustomExceptions 是一种方法。但是,如果您想为来自 HibernateValidator 的异常发送 400(基本上是您未创建的任何其他异常类型),或者您想要执行其他操作(例如日志记录)并且您不希望这种情况与您的业务逻辑一起出现,您可以使用 controllerAdvice而是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2017-03-29
  • 1970-01-01
  • 2010-09-16
  • 2014-04-22
  • 2015-03-27
相关资源
最近更新 更多