我有一个REST服务,其模式如下:
/**
* Agent
*/
public class Agent {
@JsonProperty("name")
private String name = null;
@JsonProperty("type")
private String type = null;
@JsonProperty("description")
private String description = null;
@JsonProperty("status")
private String status = null;
@JsonProperty("meta")
private Object meta = null;
@JsonProperty("Operations")
private List<OperationsListInner> operations = null;
@JsonProperty("Properties")
private List<Object> properties = null;
public Agent name(String name) {
this.name = name;
return this;
}
/**
* Get name
* @return name
**/
@JsonProperty("name")
@ApiModelProperty(required = true, value = "")
@NotNull
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Agent type(String type) {
this.type = type;
return this;
}
/**
* Get type
* @return type
**/
@JsonProperty("type")
@ApiModelProperty(value = "")
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Agent description(String description) {
this.description = description;
return this;
}
/**
* Get description
* @return description
**/
@JsonProperty("description")
@ApiModelProperty(value = "")
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Agent status(String status) {
this.status = status;
return this;
}
/**
* Get status
* @return status
**/
@JsonProperty("status")
@ApiModelProperty(value = "")
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Agent meta(Object meta) {
this.meta = meta;
return this;
}
/**
* Get meta
* @return meta
**/
@JsonProperty("meta")
@ApiModelProperty(value = "")
public Object getMeta() {
return meta;
}
public void setMeta(Object meta) {
this.meta = meta;
}
public Agent operations(List<OperationsListInner> operations) {
this.operations = operations;
return this;
}
public Agent addOperationsItem(OperationsListInner operationsItem) {
if (this.operations == null) {
this.operations = new ArrayList<>();
}
this.operations.add(operationsItem);
return this;
}
/**
* Get operations
* @return operations
**/
@JsonProperty("fetchOperations")
@ApiModelProperty(value = "")
public List<OperationsListInner> getOperations() {
return operations;
}
public void setOperations(List<OperationsListInner> operations) {
this.operations = operations;
}
public Agent properties(List<Object> properties) {
this.properties = properties;
return this;
}
public Agent addPropertiesItem(Object propertiesItem) {
if (this.properties == null) {
this.properties = new ArrayList<>();
}
this.properties.add(propertiesItem);
return this;
}
/**
* Get properties
* @return properties
**/
@JsonProperty("Properties")
@ApiModelProperty(value = "")
public List<Object> getProperties() {
return properties;
}
public void setProperties(List<Object> properties) {
this.properties = properties;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Agent agent = (Agent) o;
return Objects.equals(this.name, agent.name) &&
Objects.equals(this.type, agent.type) &&
Objects.equals(this.description, agent.description) &&
Objects.equals(this.status, agent.status) &&
Objects.equals(this.meta, agent.meta) &&
Objects.equals(this.operations, agent.operations) &&
Objects.equals(this.properties, agent.properties);
}
@Override
public int hashCode() {
return Objects.hash(name, type, description, status, meta, operations, properties);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class Agent {\n");
sb.append(" name: ").append(toIndentedString(name)).append("\n");
sb.append(" type: ").append(toIndentedString(type)).append("\n");
sb.append(" description: ").append(toIndentedString(description)).append("\n");
sb.append(" status: ").append(toIndentedString(status)).append("\n");
sb.append(" meta: ").append(toIndentedString(meta)).append("\n");
sb.append(" operations: ").append(toIndentedString(operations)).append("\n");
sb.append(" properties: ").append(toIndentedString(properties)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}
字符串
现在,当我试图将此模式导入REST客户端时,我会得到一个冲突的属性名称错误。这发生在我的GET http请求中。
Exception in thread "main" java.lang.IllegalStateException: Conflicting/ambiguous property name definitions (implicit name 'operations'): found multiple explicit names: [Operations, fetchOperations], but also implicit accessor: [method com.agentsDB.api.model.individualAgents.Agent#setOperations(1 params)][visible=true,ignore=false,explicitName=false]
at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder._explode(POJOPropertyBuilder.java:1062)
at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.explode(POJOPropertyBuilder.java:1043)
at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._renameProperties(POJOPropertiesCollector.java:798)
at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collectAll(POJOPropertiesCollector.java:324)
at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getPropertyMap(POJOPropertiesCollector.java:287)
at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getProperties(POJOPropertiesCollector.java:170)
at com.fasterxml.jackson.databind.introspect.BasicBeanDescription._properties(BasicBeanDescription.java:164)
at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.findProperties(BasicBeanDescription.java:239)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._findCreatorsFromProperties(BasicDeserializerFactory.java:346)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:330)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:255)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:214)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:137)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:411)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:477)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:4178)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3997)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2992)
at com.agentsDB.api.JsonUtil.convertJSONtoJAVA(JsonUtil.java:34)
at com.agentsDB.api.apiClientInvoke.invokeAPI(apiClientInvoke.java:54)
at com.agentsDB.api.main.main(main.java:25)
型
我已经读了很多关于这方面的文章,但找不到任何解决方案。我使用Jackson2.9.6,我的JsonUtil如下,我使用它进行序列化和反序列化。
public class JsonUtil {
private static ObjectMapper mapper;
static {
mapper = new ObjectMapper();
}
public String convertJAVAtoJSON(Object object){
String JSONresult = "";
try{
JSONresult = mapper.writeValueAsString(object);
} catch (JsonProcessingException e){
System.out.println("exception occured");
e.printStackTrace();
}
return JSONresult;
}
public <T> T convertJSONtoJAVA(String jsonString, Class<T> returnTypeClass){
T javaResult = null;
try {
javaResult = mapper.readValue(jsonString,returnTypeClass);
}catch(IOException e){
e.printStackTrace();
}
return javaResult;
}
型
有谁能帮我解决吗?我用的是Jersey+Jackson
3条答案
按热度按时间qf9go6mv1#
您应该将
@JsonProperty("fetchOperations")
更改为@JsonProperty("Operations")
。evrscar22#
我找到了这个答案的答案。最后!!首先,我必须从我所有的方法(getter和setter)中删除所有的
@JsonProperty
。现在只有类中的字段用@JsonProperty
注解。然后在Objectmapper
对象中,必须添加configure行。字符串
ubby3x7f3#
也有类似的问题。您在@JsonProperty中使用不同的值注解类字段及其getter,这导致了冲突。