一、问题
世界协调时间(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 进行调试