Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 杰克逊两班制发行_Java_Jackson_Jackson Databind - Fatal编程技术网

Java 杰克逊两班制发行

Java 杰克逊两班制发行,java,jackson,jackson-databind,Java,Jackson,Jackson Databind,我的代码工作正常,一切都很好,但困扰我的是,对于每一个响应,我都有两个类 这就是json的样子,有一个主对象的响应对象总是不同的 object{ ... ... response{ ... ... } } 这里是带有属性的类,因此当有auth操作api调用时,我会得到一个对象,其中有另一个响应,它将显示下面提到的信息(accountID,authToken) 这里有一个名为response的AuthResponse包装器,以便jackson能够找到它 public class NowOSAut

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

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

object{
...
...
response{
...
...
}
}
这里是带有属性的类,因此当有auth操作api调用时,我会得到一个对象,其中有另一个响应,它将显示下面提到的信息(accountID,authToken)

这里有一个名为response的AuthResponse包装器,以便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));


输出:{“response”:{“authToken”:“token”,“accountID”:“id”},“version”:“v1”}

Hmm这可能会工作,但这需要ObjectMapper和一些代码行,不过这是个好主意,也许Jackson有一些注释或其他东西使它更容易,而不需要这些行,谢谢你的建议。你可以创建一个包含所有字段的地图,然后你可以直接序列化地图查看我的更新答案
    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));