如何使用Spring Boot REST生成自定义JSON响应?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Spring Boot REST生成自定义JSON响应?相关的知识,希望对你有一定的参考价值。

我正在使用Spring启动开发Restful Web服务。 CRUD操作正常运行。但突然出现了新的要求,即响应需要采用特定的JSON格式。

我收到了这个回复 -

    "user": {
              "id": 123,
              "name": "shazow"
          }

但是,要求是这样的 -

    {
       "Timestamp": "2007-10-27T00:51:57Z"
       "status": "ok",
       "code": 200,
       "messages": [],
       "result": {
           "user": {
              "id": 123,
              "name": "shazow"
            }
        }
    }

此外,如果我们检索所有用户,那么它应该是 -

    {
       "Timestamp": "2007-10-27T00:51:57Z",
       "status": "ok",
       "code": 200,
       "messages": [],
       "users"[
           "user": {
                 "id": 123,
                 "name": "Shazow"
               },

           "user": {
                 "id": 101,
                 "name": "James"
               },

           "user": {
                "id": 152,
                "name": "Mathew"
               }
          ]     
     }

请提前帮助,谢谢。

答案

你可以编写一个像我在任何类中命名响应处理程序的方法,然后根据需要在其中设置响应。请参阅以下代码:

   public class ResponseHandler {

    public static ResponseEntity<Object> generateResponse(HttpStatus status, boolean error,String message, Object responseObj) {
        Map<String, Object> map = new HashMap<String, Object>();
        try {
            map.put("timestamp", new Date());
            map.put("status", status.value());
            map.put("isSuccess", error);
            map.put("message", message);
            map.put("data", responseObj);

            return new ResponseEntity<Object>(map,status);
        } catch (Exception e) {
            map.clear();
            map.put("timestamp", new Date());
            map.put("status", HttpStatus.INTERNAL_SERVER_ERROR.value());
            map.put("isSuccess",false);
            map.put("message", e.getMessage());
            map.put("data", null);
            return new ResponseEntity<Object>(map,status);
        }
    }
}

使用示例:

 @RestController
public class UtilityController {

    private static Logger LOGGER = LoggerFactory.getLogger(UtilityController.class);

    @RequestMapping("/test")
    ResponseEntity<Object> getAllCountry() {
        LOGGER.info("Country list fetched");
        return ResponseHandler.generateResponse(HttpStatus.OK, false, "Success", null);
    }

}

如果您有任何其他疑问,请告诉我。

以上是关于如何使用Spring Boot REST生成自定义JSON响应?的主要内容,如果未能解决你的问题,请参考以下文章

处理从自定义转换器抛出的Spring Boot REST中的异常

如何在 Spring Boot Rest api 响应的 ResponseEntity 中添加自定义属性

Spring Boot - 使用自定义 PreAuthorize 表达式和身份验证测试 Rest Api

Spring Boot MongoDB REST - 自定义存储库方法

如何为 Spring Boot Rest 使用自定义异常?

我可以让自定义控制器镜像 Spring-Data-Rest / Spring-Hateoas 生成的类的格式吗?