- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下类(class):
LocationCustomDataItem.java
public class LocationCustomDataItem {
private String attributeNumber;
private String attributeLabel;
private String attributeValue;
public LocationCustomDataItem() {
}
public LocationCustomDataItem(final String attributeNumber, final String attributeLabel, final String attributeValue) {
this.attributeNumber = attributeNumber;
this.attributeLabel = attributeLabel;
this.attributeValue = attributeValue;
}
/**
* @return the attributeNumber
*/
public String getAttributeNumber() {
return attributeNumber;
}
/**
* @param attributeNumber the attributeNumber to set
*/
public void setAttributeNumber(String attributeNumber) {
this.attributeNumber = attributeNumber;
}
/**
* @return the attributeLabel
*/
public String getAttributeLabel() {
return attributeLabel;
}
/**
* @param attributeLabel the attributeLabel to set
*/
public void setAttributeLabel(String attributeLabel) {
this.attributeLabel = attributeLabel;
}
/**
* @return the attributeValue
*/
public String getAttributeValue() {
return attributeValue;
}
/**
* @param attributeValue the attributeValue to set
*/
public void setAttributeValue(String attributeValue) {
this.attributeValue = attributeValue;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this, false);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE, false);
}
LocationCustomDataAttributes.java
public class LocationCustomDataAttributes {
private final List<LocationCustomDataItem> locationCustomDataItems;
public LocationCustomDataAttributes() {
this.locationCustomDataItems = new ArrayList<>();
}
public LocationCustomDataAttributes(final List<LocationCustomDataItem> locationCustomDataItems) {
this.locationCustomDataItems = locationCustomDataItems;
}
/**
* @return unmodifiable locationCustomDataItems list
*/
public List<LocationCustomDataItem> getLocationCustomDataItems() {
return Collections.unmodifiableList(this.locationCustomDataItems);
}
/**
* Adds LocationCustoDataItem to internal collection
*
* @param item LocationCustomDataItem to add to item list
*/
public void addItem(final LocationCustomDataItem item) {
this.locationCustomDataItems.add(item);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this, false);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE, false);
}
和这个测试 json:
{
"locationCustomDataAttributes" : {
"locationCustomDataItems" : [ {
"attributeLabel" : "testLabel1",
"attributeNumber" : "testNumber1",
"attributeValue" : "testLabel1"
}, {
"attributeLabel" : "testLabel2",
"attributeNumber" : "testNumber2",
"attributeValue" : "testLabel2"
} ]
}
}
我尝试使用 ObjectMapper 将 json 转换为对象,但它在“locationCustomDataAttributes”周围抛出无法识别的PropertyException:
MapperTest.java
@Test
public void test() throws JsonParseException, JsonMappingException, IOException {
ObjectMapper om =new ObjectMapper();
LocationCustomDataAttributes actual = om.readValue(json, LocationCustomDataAttributes.class);
LocationCustomDataAttributes expected = new LocationCustomDataAttributes();
expected.addItem(new LocationCustomDataItem("testNumber1", "testLabel1", "testValue1"));
expected.addItem(new LocationCustomDataItem("testNumber2", "testLabel2", "testValue2"));
assertThat(actual).isEqualTo(expected);
}
错误信息:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "locationCustomDataAttributes" (class com.lmig.ci.fnol.transformer.domain.LocationCustomDataAttributes), not marked as ignorable (one known property: "locationCustomDataItems"])
at [Source: {"locationCustomDataAttributes" : {"locationCustomDataItems" : [ {"attributeLabel" : "testLabel1","attributeNumber" : "testNumber1","attributeValue" : "testLabel1"},{"attributeLabel" : "testLabel2","attributeNumber" : "testNumber2","attributeValue" : "testLabel2"}]}}; line: 1, column: 36] (through reference chain: com.lmig.ci.fnol.transformer.domain.LocationCustomDataAttributes["locationCustomDataAttributes"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:62)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:833)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1096)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1467)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1445)
//等等...`
我没有直接使用 Jackson 的大量经验,因此我还没有对类本身进行注释,但从之前的工作(例如使用 Spring Controller )来看,转换会自动发生,而不需要在类上进行注释。在这种情况下,情况看起来并非如此,我在类中缺少什么,或者当前的类结构是否由于某种原因不适合 Jackson 自动转换?
最佳答案
om.readValue(json, LocationCustomDataAttributes.class)
此行要求解析 JSON 文档中的 LocationCustomDataAttributes
对象。但 JSON 实际上包含一个包装对象,该对象的属性可以解析为 LocationCustomDataAttributes
对象。解决方案:
为包装对象创建读取器。例如
ObjectReader reader = om
.readerFor(LocationCustomDataAttributes.class)
.withRootName("locationCustomDataAttributes");
LocationCustomDataAttributes actual = reader.readValue(json);
定义包装类
class AttributesWrapper {
private LocationCustomDataAttributes locationCustomDataAttributes;
// add getters, setters, constructors etc
}
然后解析它:
LocationCustomDataAttributes actual = om
.readValue(json, AttributesWrapper.class)
.getLocationCustomDataAttributes();
关于java - jackson :无法识别的属性异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48709025/
我找不到关于 jackson 的ObjectMapper与其他映射器(例如dozer/mapStruct/modelMapping/etc)之间的区别的任何解释。所有文章都比较了dozer/mapSt
我正在使用Jackson来反序列化Kotlin数据类。我正在使用jackson-kotlin-module,但 jackson 却给我以下错误: Can not construct instance
我正在尝试将包从“com.fasterxml.jackson”重新定位到我自己的包(即“mypackage.com.fasterxml.jackson”),然后在我拥有的另一个 JAR 中使用它。 我
对于JSON对象,Subject: { "permissions":["foo", "bar"], ... } ...我想反序列化为: class Subject { priv
我正在使用 @JsonTypeInfo 和 @JsonSubTypes 来映射基于给定属性的解析子类。这是我想要解析的示例 JSON 的一个人为示例。 { "animals": [ { "
我们正在使用 dropwizard 版本 0.6.3。当我们尝试升级 0.7.0 版本时,我们在服务启动时收到此错误。 线程“main”中的异常 java.lang.VerifyError: clas
我正在尝试实现自定义解串器。因为我只想向默认反序列化器添加功能,所以我尝试在我的自定义反序列化器中存储默认反序列化器:我想使用默认反序列化 json,然后添加其他信息。 我正在尝试使用 BeanDes
我有一个这样的类(class): public class Person { private String name; public String getName(){ return
我有以下 Kotlin 数据类: data class TestObject( val boolField: Boolean, val stringField: Str
使用 Jackson 库,在 Eclipse 4.9.0 版本中出现以下错误 缺少工件 com.fasterxml.jackson.core:jackson-databind:bundle:2.9.6
我试图在我的应用程序中从azure实现keyvault,在为DefaultAzureCredentialBuilder()实现azure-identity:1.5.4 lib后,它会抛出链接错误,如下
我试图在我的应用程序中从azure实现keyvault,在为DefaultAzureCredentialBuilder()实现azure-identity:1.5.4 lib后,它会抛出链接错误,如下
我知道我们可以使用 Jackson MixIn 来重命名属性或忽略属性(参见示例 here )。但是可以添加属性吗? 添加的属性可以是: 一个常数(如版本号) 计算值(例如,如果源类具有 getWid
我有一个在 Wildfly 10 上运行的应用程序,它需要更新版本的 jackson。简单地更新 maven 依赖是行不通的。 Wildflys 自己的版本似乎干扰了... 有人有提示吗? 最佳答案
我在 Tomcat 休息应用程序中运行 Jersey 2.5.1 & Jackson。对于我最初将 POJO 简单地转换为 JSON 的用例,基本设置效果很好。集合很好地转换为 json 数组,如下所
有没有办法告诉 jackson 在序列化过程中忽略那些用非 jackson 注释注释的字段? 例如: @SomeAnnotation private String foo; 我知道有 jackson
我遇到了 jackson 序列化问题, map 中存在空值。显然,这是 Wildfly 9 使用的 Jackson 版本中的一个已知错误 ( https://issues.jboss.org/brow
给定一个像这样的 JSON 映射类: public class Person { @JsonProperty String getName() { ... } @JsonPro
如何让 Jackson 的 XMLMapper 在反序列化时读取根 xml 元素的名称? 我正在将输入 XML 反序列化为通用 Java 类、LinkedHashMap,然后反序列化为 JSON。我想
我对抽象类和 JSON 序列化和反序列化的对象引用有问题。抽象的问题如下所示: 我有一个由节点和边组成的图。每条边连接两个节点。节点可以是红色和绿色的。因此,有一个抽象类Node和两个派生类 RedN
我是一名优秀的程序员,十分优秀!