jackson二类问题

8oomwypt  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(437)

我的代码运行良好,但困扰我的是,对于每一个响应,我都有两个类。
这就是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的 Package 器,称为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();

所以我想知道是否有一种方法可以在不创建两个类的情况下返回response对象。先谢谢你

bkhjykvo

bkhjykvo1#

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

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

输出:{“response”:{“authtoken”:“token”,“accountid”:“id”},“version”:“v1”}

相关问题