杰克逊两个班的问题



我的代码正在工作,一切都很好,但让我困扰的是,对于每一个响应,我都有两个类。

json就是这样的,有一个主对象的响应对象总是不同的。

object{
...
...
response{
...
...
}
}

这里是带有属性的类,所以当有auth操作api调用时,我会得到一个对象,里面有另一个响应,它将显示下面提到的信息(accountID,authToken(

public class AuthResponse implements IResponse {
@JsonProperty
private String accountID;
@JsonProperty
private String authToken;
// IResponse just have a validation method
}

这里有一个AuthResponse的包装器,它被称为response,这样jackson就可以定位它

public class NowOSAuthResponse extends NowOSResponse {
@JsonProperty
private AuthResponse response;
//can be replaced with @Getter
@Override
public IResponse getResponse() {
return response;
}
}

最后是包含抽象接口的主对象,这样每个响应都有自己的返回对象

public abstract class NowOSResponse {
@JsonProperty
private String version;
@JsonProperty
private String operation;
@JsonProperty
private String status;
public abstract IResponse getResponse();

所以我想知道是否有一种方法可以在不创建两个类的情况下返回响应对象。提前感谢

也许这段代码可以帮助您:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectMapper mapper = new ObjectMapper();
ObjectNode root = mapper.createObjectNode();
root.putPOJO("response", Map.of("accountID", "id", "authToken", "token"));
root.put("version", "v1");
mapper.writer().writeValue(bos, root);
System.out.println(new String(bos.toByteArray(), StandardCharsets.UTF_8));

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectMapper mapper = new ObjectMapper();
ObjectNode root = mapper.createObjectNode();
var response = Map.of("response", Map.of("accountID", "id", "authToken", "token"), "version", "v1");
mapper.writer().writeValue(bos, response);
System.out.println(new String(bos.toByteArray(), StandardCharsets.UTF_8));

输出:{"响应":{"authToken":"token","accountID":"id"},";版本":"v1〃}

最新更新