Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 Jackson JSON提供程序忽略@JsonIgnore_Java_Json_Rest_Jakarta Ee_Jackson - Fatal编程技术网

Java Jackson JSON提供程序忽略@JsonIgnore

Java Jackson JSON提供程序忽略@JsonIgnore,java,json,rest,jakarta-ee,jackson,Java,Json,Rest,Jakarta Ee,Jackson,我有一个JAX-RS服务来访问一些数据。还有指向其他类的链接,我用@JsonIgnore注释了这些类。现在,Jackson提供者忽略了这些注释 我的目标: @Entity @Table(name = "documents") @XmlRootElement public class Document implements Serializable { private static final long serialVersionUID = 1L; @Id @Genera

我有一个JAX-RS服务来访问一些数据。还有指向其他类的链接,我用
@JsonIgnore
注释了这些类。现在,Jackson提供者忽略了这些注释

我的目标:

@Entity
@Table(name = "documents")
@XmlRootElement
public class Document implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "version")
    private String version;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 35)
    @Column(name = "document_number")
    private String documentNumber;
    @Basic(optional = false)
    @NotNull
    @Column(name = "document_date")
    @Temporal(TemporalType.TIMESTAMP)
    private Date documentDate;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "subDocument", fetch = FetchType.LAZY)
    private List<SubDocument> subDocumentList;

    public Document() {
    }

    public Document(Integer id) {
        this.id = id;
    }

    public Document(Integer id, String version, String documentNumber, Date documentDate) {
        this.id = id;
        this.version = version;
        this.documentNumber = documentNumber;
        this.documentDate = documentDate;
    }

    @XmlAttribute(required = false)
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @XmlAttribute(required = true)
    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    @XmlAttribute(required = true)
    public String getDocumentNumber() {
        return documentNumber;
    }

    public void setDocumentNumber(String documentNumber) {
        this.documentNumber = documentNumber;
    }

    @JsonSerialize(using = JsonDateSerializer.class)
    @XmlAttribute(required = true)
    public Date getDocumentDate() {
        return documentDate;
    }

    @JsonDeserialize(using = JsonDateDeserializer.class)
    public void setDocumentDate(Date documentDate) {
        this.documentDate = documentDate;
    }

    @JsonIgnore
    public List<SubDocument> getSubDocumentList() {
        return subDocumentList;
    }

    public void setSubDocumentList(List<SubDocument> subDocumentList) {
        this.subDocumentList = subDocumentList;
    }
}
因此,即使我的文档中存在
@JsonIgnore
注释,列表也会映射到输出。它确实适用于
@xmltransive
注释,但由于也使用了jaxbget,因此我无法添加该注释


我使用Codehaus实现,但我也尝试了FasterXML,两者的结果相同。我该怎么做才能解决这个问题?服务正在Glassfish 4.1服务器上运行。

将@JsonIgnore放在字段属性上方,而不是放在getter方法上。 i、 e

@JsonIgnore
私有列表子文档列表;

我猜你用的是玻璃鱼。尽管Glassfish有Jackson提供程序库,但它使用MOXy作为默认提供程序。所以实际上是莫西在做连载,而不是杰克逊。如果要禁用MOXy,请将属性
jersey.config.server.disableMoxyJson
设置为true。您可以覆盖
应用程序
子类中的
Map getProperties()
。如果您这样做,那么您将需要使用
JacksonJaxbJsonProvider
,而不是
JacksonJsonProvider
,如果您想要支持JAXB注释,我已经尝试过了,但是我需要添加jacksonxc依赖项。当我这样做时,它只返回与以前相同的结果。同时,我在球场上添加了@JsonIgnore,getter和setter。我遇到了同样的问题!(使用fasterxml)。我可以将@JsonIgnore放在成员处,getter和setter-jax-rs仍然尝试映射(并引发无效的json异常,因为成员的类型不是为json设计的)。有趣的是,当我将相同的代码(即带有@JsonIgnore的相同对象)传递给对象映射器时,它可以很好地工作。因此,我假设一定是jax rs中的某些东西造成了问题。@对此有什么更新吗?尝试过了,现在我在字段中有了@JsonIgnore,getter和setter。仍然输出它。
@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new java.util.HashSet<>();
    try {
        Class jacksonProvider = Class.forName("org.codehaus.jackson.jaxrs.JacksonJsonProvider");
        resources.add(jacksonProvider);
    } catch(ClassNotFoundException ex) {
        SLOGGER.fatal("could not find class JacksonJsonProvider", ex);
    }
    addMyOtherResourceClasses(resources);
    return resources;
}
@GET
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
@Path("getDocumentById/{id}")
public Document getDocumentById(@PathParam("id") String id) {
    return sbDocuments.getDocumentById(id);
}
@JsonIgnore
private List<SubDocument> subDocumentList;