Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
Jackson将java合成序列化为json_Java_Json_Jakarta Ee_Jackson - Fatal编程技术网

Jackson将java合成序列化为json

Jackson将java合成序列化为json,java,json,jakarta-ee,jackson,Java,Json,Jakarta Ee,Jackson,我需要一些帮助来重新分解对客户端的java响应。 这是我当前的响应,用jackson2序列化,效果很好 public class PermissionResponse { @JsonProperty private Long id; @JsonProperty private String name; @JsonProperty private Long actionId; @JsonProperty private String actionName;

我需要一些帮助来重新分解对客户端的java响应。 这是我当前的响应,用jackson2序列化,效果很好

public class PermissionResponse {
  @JsonProperty
  private Long id;

  @JsonProperty
  private String name;

  @JsonProperty
  private Long actionId;

  @JsonProperty
  private String actionName;

  @JsonProperty
  private Long resourceId;

  @JsonProperty
  private String resourceName;

  @JsonProperty
  private Long environmentId;

  @JsonProperty
  private String environmentName;

  ...
}
但不是传球

@JsonProperty
private String actionName;

@JsonProperty
private Long actionId;
我想要动作实体(包含这两个字段-
actionName/name
actionId/id
)。比如:

@JsonProperty
private Action action;

有人能给我指出正确的方向吗?因为我在这里找不到我需要的东西。谢谢

我不是Jackson的专家,但我认为只要你能序列化Action类,Jackson(像GSON一样)就会在任何地方序列化它

在GSON中,这将在以下步骤中完成

public class PermissionResponse {

    private Long id;
    private String name;
    private Action action;
    private Long resourceId;
    private String resourceName;
    private Long environmentId;
    private String environmentName;
}

public class Action {

    private Long id;
    private String name
}
您甚至应该为资源和环境创建类,例如:

public class PermissionResponse {

    private Long id;
    private String name;
    private Action action;
    private Resource resource;
    private Environment environment;
}

public class Action {

    private Long id;
    private String name;
}

public class Resource {

    private Long id;
    private String name;
}

public class Environment {

    private Long id;
    private String name;
}
上面的示例与GSON兼容,因此您只需与Jackson一起尝试,但我确信,一旦您输入了所有正确的注释,它们就会很好地工作

编辑:更进一步,您可以创建一个公共类,例如:

public class Permission {

    private Long id;
    private String name;
}

public class PermissionResponse extends Permission {

    private Action action;
    private Resource resource;
    private Environment environment;
}

public class Action extends Permission {

}

public class Resource extends Permission {

}

public class Environment extends Permission {

}
如果您不打算在行动、资源或环境中添加任何其他内容,请不要使用这些类,例如:

public class Permission {

    private Long id;
    private String name;
}

public class PermissionResponse extends Permission {

    private Permission action;
    private Permission resource;
    private Permission environment;
}

显然,上面使用的代码更少,但是您无法知道权限是什么类型(除非在获取对象之前知道)。

如果PermissionResponse对象具有getter和setter,则不需要所有这些@JsonProperty注释。您的嵌套操作对象应该通过工具自动序列化。你遇到了什么问题?