json返回工具类|世界协调时间(UTC)

发布于:2024-05-08 ⋅ 阅读:(24) ⋅ 点赞:(0)

 

一、问题

世界协调时间(UTC)是一个标准的时间参考,通常被用于跨越不同时区的时间标准。要将 UTC 时间转换为中国时间(中国标准时间),你需要将时间加上8个小时,因为中国位于 UTC+8 时区。

初中知识的时区问题了。

给定 UTC 时间 2024-05-08T02:21:45Z,你可以通过以下方式转换为中国标准时间:

将 UTC 时间加上 8 个小时。
结果将是中国标准时间。
通过添加 8 个小时:

UTC 时间:2024-05-08T02:21:45Z
中国标准时间:2024-05-08T10:21:45(即当天早上 10 点 21 分 45 秒)。

二、json标准返回数据格式的代码

2.1新建了一个工具类

package fuak.ioe.util;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class APIResponseUtil {
    @JsonProperty("status")
    private Status status;

    @JsonProperty("data")
    private Map<String, Object> data = new HashMap<>();

    @JsonProperty("metadata")
    private Metadata metadata;

    public APIResponseUtil() {
        // 默认构造函数
    }

    public APIResponseUtil(Status status, Metadata metadata) {
        this.status = status;
        this.metadata = metadata;
    }

    // Getter 和 Setter 方法
    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public Map<String, Object> getData() {
        return data;
    }

    public Metadata getMetadata() {
        return metadata;
    }

    public void setMetadata(Metadata metadata) {
        this.metadata = metadata;
    }

    // 内部类定义
    public static class Status {
        @JsonProperty("code")
        private int code;

        @JsonProperty("message")
        private String message;

        public Status() {
            // 默认构造函数
        }

        public Status(int code, String message) {
            this.code = code;
            this.message = message;
        }

        // Getter 和 Setter 方法
        public int getCode() {
            return code;
        }

        public void setCode(int code) {
            this.code = code;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }
    }

    public static class Metadata {
        @JsonProperty("requestId")
        private String requestId;

        @JsonProperty("timestamp")
        @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'")
        private Date timestamp;

        public Metadata() {
            // 默认构造函数
        }

        public Metadata(String requestId, Date timestamp) {
            this.requestId = requestId;
            this.timestamp = timestamp;
        }

        // Getter 和 Setter 方法
        public String getRequestId() {
            return requestId;
        }

        public void setRequestId(String requestId) {
            this.requestId = requestId;
        }

        public Date getTimestamp() {
            return timestamp;
        }

        public void setTimestamp(Date timestamp) {
            this.timestamp = timestamp;
        }
    }
    
    @Override
    public String toString() {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.writeValueAsString(this);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return "{}"; // 如果转换失败,返回空对象
        }
    }
}

2.2jackson maven 坐标

在 Maven 项目中使用 Jackson 库,您需要在项目的 pom.xml 文件中添加相应的依赖

<dependency>

  <groupId>com.fasterxml.jackson.core</groupId>

       <artifactId>jackson-databind</artifactId>

     <version>2.12.6</version>

</dependency>

 2.3直接导包

2.4测试类

根据公司给定的前后端json返回格式要求

  • tatus:包含状态码和描述消息,提供了关于操作执行结果的简要信息。

    • code:状态码,通常为0表示成功,其他值表示不同类型的错误。
    • message:可读的描述信息,例如"success"或错误描述。
  • data:包含请求返回的实际数据。在这个示例中,它包括userId、userName和age字段。

  • metadata:包含与请求或响应相关的其他元数据。

    • requestId:一个唯一标识请求的ID,便于跟踪和调试。
    • timestamp:响应的时间戳,以ISO 8601格式表示。

 

package fuak.ioe.test;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

import zck.ioe.util.APIResponseUtil;

public class APIResponseTest {

    @Test
    public void testAPIResponse() {
        // 创建 Status 对象
        APIResponseUtil.Status status = new APIResponseUtil.Status(0, "success");

        // 创建 data 对象
        Map<String, Object> data = new HashMap<>();
        data.put("userId", 123);
        data.put("userName", "John");
        data.put("age", 25);
        data.put("email", "john@example.com");

        // 创建 Metadata 对象
        Date timestamp = new Date();
        APIResponseUtil.Metadata metadata = new APIResponseUtil.Metadata("abc123", timestamp);

        // 创建 APIResponse 对象
        APIResponseUtil response = new APIResponseUtil(status, metadata);

        // 设置 data
        response.getData().putAll(data);

        // 打印 JSON 格式的响应
        String jsonResponse = response.toString();
        System.out.println(jsonResponse);
        
        
    }
}
呈现

{
    "status": {
        "code": 0,
        "message": "success"
    },
    "data": {
        "userName": "John",
        "userId": 123,
        "age": 25,
        "email": "john@example.com"
    },
    "metadata": {
        "requestId": "abc123",
        "timestamp": "2024-05-08T02:24:51Z"
    }
}

三、总结

我们首先创建了一个 APIResponse.Status 对象,并传入状态码和消息。
然后创建了一个 data 的 HashMap 对象,并添加一些示例数据。
接着,我们创建了一个 APIResponse.Metadata 对象,其中包含请求的 requestId 和当前时间戳。
最后,我们通过新的构造函数创建了 APIResponse 对象,将 status 和 metadata 传入。
使用 response.getData().putAll(data); 将预设的数据添加到 APIResponse 对象的 data 中。
最后,将 APIResponse 对象转换为 JSON 格式的字符串,并打印出来。

最最后可以将json 回调给前端,测试人员可以通过metadata 中的时间戳和请求id 进行调试


网站公告

今日签到

点亮在社区的每一天
去签到