public class UrlTemplate extends AbstractBeanDefinition implements Serializable {

    private List<HeaderField> header = new ArrayList<>();

    @Tag("header")
    public List<HeaderField> getHeader() {
        return this.header;
    }

    @Node("header/header-field")
    public void setHeader(HeaderField headerField) {
        this.header.add(headerField);
    }

    public void setHeader(List<HeaderField> header) {
        this.header = header;
    }
}


TagNode注释由其他库使用,并且我不能更改方法setHeader(HeaderField headerField)

我定义了一个有效的setter setHeader(List<HeaderField> header)进行序列化,但是当我尝试将UrlTemplate序列化为String并将String反序列化为UrlTemplate时,抛出异常:

com.fasterxml.jackson.databind.JsonMappingException:
Conflicting setter definitions for property "header":
com.enniu.crawler.encreeper.core.domain.config.search.UrlTemplate#setHeader(1 params) vs
com.enniu.crawler.encreeper.core.domain.config.search.UrlTemplate#setHeader(1 params)


我想我可以宣布setHeader(List<HeaderField> header)是Jackson进行反序列化的二传手,但是我不知道如何与Jackson一起使用。

有人可以给我一些提示吗?

最佳答案

尝试使用杰克逊的JsonProperty批注

@JsonProperty("header")
private Object headerJson;

public Object getHeaderJson() {
    return status;
}

public void setHeaderJson(Object headerJson) {
    this.headerJson= headerJson;
}


headerJson将被映射到json header,因此它应解决冲突问题。

10-07 20:03