简体   繁体   English

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

[英]How to generate customized JSON response with Spring Boot REST?

I am developing Restful web services with Spring boot. 我正在使用Spring启动开发Restful Web服务。 And the CRUD operations are working fine with it. CRUD操作正常运行。 But suddenly new requirement has come that the response needs to be in specific JSON format. 但突然出现了新的要求,即响应需要采用特定的JSON格式。

I am getting this response - 我收到了这个回复 -

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

But, the requirement is something like this - 但是,要求是这样的 -

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

Also, if we retrieve all users then it should be - 此外,如果我们检索所有用户,那么它应该是 -

    {
       "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"
               }
          ]     
     }

Please help, thanks in advance. 请提前帮助,谢谢。

You can write a method like I name it response handler in any class and then set your response in it as you like. 你可以编写一个像我在任何类中命名响应处理程序的方法,然后根据需要在其中设置响应。 Please see the code below: 请参阅以下代码:

   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);
        }
    }
}

Example to use : 使用示例:

 @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);
    }

}

If you have any other queries, please do let me know. 如果您有任何其他疑问,请告诉我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM