gpt4 book ai didi

java - Spring REST 调用响应类型对象有微小差异

转载 作者:行者123 更新时间:2023-12-02 01:23:36 25 4
gpt4 key购买 nike

我有一个服务需要返回两个类似的响应。第一个响应是 days,它是一个名为 availableDays 的字符串数组,另一个响应是 times,它是一个名为 的字符串数组可用时间

我已经完成了第一个(),我的响应对象如下所示:

public class AvailableDaysTimesResponse {
private String status;
private String[] avaialbleDays;
...
}

问题是:我是否需要创建一个不同的响应类并在其中包含一个名为 availableTimesString[] 变量才能返回 availableTimes 或者我可以以某种方式使用此类来更改发送回调用者的 JSON 中的数组变量的名称?

最佳答案

您可以使用 Jackson @JsonView 注释来使用相同的类。

@JsonView is used to indicate the View in which the field will be included while serialization/deserialization and is very helpful when it is needed to include different fields of object while serialization for different use cases. @JsonView annotation is supported on Spring for v≥4.1

首先,您必须创建一个类来声明您的 View 。

public class AvailableDaysTimesViews {

public static class AvailableDaysResponse {
}

public static class AvailableTimesResponse {
}
}

然后您必须将这些更改包含在 AvailableDaysTimesResponse 类中

public class AvailableDaysTimesResponse {

@JsonView({
AvailableDaysTimesViews.AvailableDaysResponse.class,
AvailableDaysTimesViews.AvailableTimesResponse.class
})
private String status;

@JsonView(AvailableDaysTimesViews.AvailableDaysResponse.class)
private String[] avaialbleDays;

public String getStatus() {
return status;
}

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

@JsonProperty("availableTimes")
@JsonView(AvailableDaysTimesViews.AvailableTimesResponse.class)
public String[] getAvailableTimes() {
return avaialbleDays;
}

public String[] getAvaialbleDays() {
return avaialbleDays;
}

public void setAvaialbleDays(String[] avaialbleDays) {
this.avaialbleDays = avaialbleDays;
}
}

如何将 JSON View 与 Spring 结合使用

@JsonView(AvailableDaysTimesViews.AvailableDaysResponse.class)
@RequestMapping("/days")
public @ResponseBody
AvailableDaysTimesResponse getDays() {
AvailableDaysTimesResponse resp = new AvailableDaysTimesResponse();
resp.setStatus("DONE");
resp.setAvaialbleDays(new String[]{"MONDAY"});
return resp;
}

@JsonView(AvailableDaysTimesViews.AvailableTimesResponse.class)
@RequestMapping("/times")
public @ResponseBody
AvailableDaysTimesResponse getTimes() {
AvailableDaysTimesResponse resp = new AvailableDaysTimesResponse();
resp.setStatus("DONE");
resp.setAvaialbleDays(new String[]{"ONCE", "TWICE"});
return resp;
}

引用文献:

Jackson @JsonView for serializing and deserializing object

Jackson JSON Views with Spring

关于java - Spring REST 调用响应类型对象有微小差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57288218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com