在Spring Controller中返回原始类型/包装器的最佳方法是什么?

时间:2019-12-04 19:06:26

标签: java spring rest api spring-boot

当我像这样从Spring控制器返回Integer或其他包装器时:

@GetMapping(path = "test1")
public Integer test1() {
    return 1;
}

对用户的回复具有以下内容:

1

这不是有效的JSON。是否有任何实践应如何返回这些值?令人担心的是,我希望所有API返回有效的JSON。我创建了一个返回的包装器:

{
    "value": 1
}

但是,也许有更好的方法来解决这些情况?

1 个答案:

答案 0 :(得分:1)

如果返回值以纯文本形式返回,例如返回String且不带双引号,则以下条件成立:

  • 您使用@RestController@ResponseBody

  • 您的代码未指定响应内容类型

  • 与JSON响应相比,客户端更喜欢文本响应

要强制对JSON进行响应,您需要通过指定以下内容告诉Spring:

@GetMapping(path = "test1", produces = "application/json")

@GetMapping(path = "test1", produces = MediaType.APPLICATION_JSON_VALUE)

由于您的回复只是一个数字,因此您可以通过指定例如text/plain作为响应内容类型。与其他任何响应一样,由客户端来正确解释响应值。

但是,简单的1字节响应1 有效的JSON,因此您可以保留它,也可以根据需要执行{ "value": 1 } JSON响应。这是您的API,因此您可以确定响应格式是什么。

只要记住要对其进行记录,那么无论谁编写客户端代码,都会知道会发生什么。