尝试运行使用jackon的ObjectMapper类的java程序时出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
at com.inin.dynamotransfer.DynamoTransfer.importData(DynamoTransfer.java:133)
at com.inin.dynamotransfer.DynamoTransfer.main(DynamoTransfer.java:67)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 2 more
Run Code Online (Sandbox Code Playgroud)
我有杰克逊的注解,数据绑定(包含ObjectMapper),以及核心的JAR文件中在〜/ .m2目录/库我的Maven仓库/ COM/fasterxml /杰克逊/核心/ jackson- [包名] /2.4.0.这是我的pom.xml的依赖项部分:
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
这是我的CLASSPATH:
:/Users/myusername/Library/Java/Extensions:/Library/Java/Extensions:/Users/myusername/.m2/repository
Run Code Online (Sandbox Code Playgroud)
所以Maven知道所有这些JAR - 在哪里获取em,在哪里放em等等 - 但java本身似乎无法找到我需要的类.我究竟做错了什么??谢谢!
问题是如何将JSON对象数组映射到java.util.Map每个键都是对象的某个指定属性的位置,值是对象本身.
JSON:
{"items": [{"field1": 1, "field2": "Hello"}, {"field1": 2, "field2":"World"}]}
Run Code Online (Sandbox Code Playgroud)
Java POJO:
public class Storage {
private Map<Integer, Item> items;
}
public class Item {
private Integer field1;
private String field2;
}
Run Code Online (Sandbox Code Playgroud)
那么有什么方法可以指定在将数组项反序列化时ObjectMapper应该使用field1每个JSON对象的属性作为键Map吗?
我一直在尝试升级JSON模块以使用Jackson的FasterXML(2.6.3)版本而不是旧的Codehaus模块.在升级过程中,我注意到使用FasterXML而不是Codehaus时命名策略有所不同.
Codehaus在命名策略方面更灵活.下面的测试突出了我用FasterXML面临的问题.我如何配置ObjectMapper它遵循Codehaus相同的策略?
我不能改变JSONProperty注释,因为有数百个注释.我希望升级在命名策略方面向后兼容.
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
/*import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.PropertyNamingStrategy;*/
import org.junit.Assert;
import org.junit.Test;
public class JSONTest extends Assert {
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Product {
@JsonProperty(value = "variationId")
private String variantId;
@JsonProperty(value = "price_text")
private String priceText;
@JsonProperty(value = "listPrice")
public String listPrice;
@JsonProperty(value = "PRODUCT_NAME")
public String name;
@JsonProperty(value = "Product_Desc")
public String description;
}
private static final String VALID_PRODUCT_JSON = …Run Code Online (Sandbox Code Playgroud) 我们有一个包含 350 多列的表。生成了 pojo 类并且 getter 的顺序被搞乱了。尝试使用 jackson 的 csvmapper,但它根据 getter 顺序生成 csv。@JsonPropertyOrder 也不能使用,因为有很多列。我们在 xml 中维护列排序,并且可以在运行时生成字段顺序数组。我们可以在运行时覆盖以提供用于属性排序的字段名数组吗?我们可以使用注释内省器进行自定义吗?
我有一个POJO,看起来像这样:
public class Thing
{
private final int x;
private final int y;
private final int z;
public Thing(String strThing)
{
// parse strThing which is in some arbitrary format to set x, y and z
}
@Override
public String toString()
{
// return a string representation of thing
// (same format as that parsed by the constructor)
}
@Override
public boolean equals(Object obj) ...
@Override
public int hashCode() ...
}
Run Code Online (Sandbox Code Playgroud)
我希望将它用作映射的键(例如HashMap<Thing, SomeOtherPOJO>),当序列化为json时,使用Thing的toString()表示键,并且在反序列化时使用String构造函数.这可能是使用像jackson数据绑定注释这样简单的东西吗?解决这个问题的最佳方法是什么?
现在阻止我在生产中使用kotlin的唯一问题是我找不到正确的proguard文件.
我用过的:
1.Kotlin
2.Anko
3.Jackson-科特林模块
这是警告信息:
:app:proguardRelease
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry
Warning: rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.ConcurrentCircularArrayQueue: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.ConcurrentSequencedCircularArrayQueue: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.MpmcArrayQueueConsumerField: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.MpmcArrayQueueProducerField: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.MpscLinkedQueue: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.SpmcArrayQueueConsumerField: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.SpmcArrayQueueProducerField: can't find referenced class sun.misc.Unsafe
Warning: rx.internal.util.unsafe.SpscArrayQueue: can't …Run Code Online (Sandbox Code Playgroud) 我试图使用jackson将yaml文件解析为模型
型号 -
public class TestModel {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
解析
private static ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
TestModel obj = mapper.readValue(yamlFile, TestModel.class);
Run Code Online (Sandbox Code Playgroud)
YAML文件
name: somename
Run Code Online (Sandbox Code Playgroud)
例外
Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'name': was expecting 'null', 'true', 'false' or NaN
[error] at [Source: /Users/amruth.s/Documents/Analytics/hydra/reportManager/target/scala-2.9.1/classes/viz/LineGraph.yaml; line: 1, column: 6]
[error] at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1369)
[error] at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:599)
[error] at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:2449)
[error] at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:2426)
[error] at …Run Code Online (Sandbox Code Playgroud) 我删除了一个旧项目(2 岁),但在构建项目时遇到问题,出现以下错误。
Error:(57, 29) java: cannot access com.fasterxml.jackson.core.Versioned
class file for com.fasterxml.jackson.core.Versioned not found
Run Code Online (Sandbox Code Playgroud)
和
Error:(58, 29) java: cannot access com.fasterxml.jackson.core.ObjectCodec
class file for com.fasterxml.jackson.core.ObjectCodec not found
Run Code Online (Sandbox Code Playgroud)
这是我在 pom.xml 中的依赖项
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-guava</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.1.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是问题似乎发生的地方
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new GuavaModule());
objectMapper.registerModule(new JodaModule());
return objectMapper;
}
Run Code Online (Sandbox Code Playgroud)
我环顾四周,尝试了不同的版本,但没有运气。我这样做错了吗?这曾经奏效过。
任何帮助,将不胜感激。
谢谢
如果我有班级A.java:
@JacksonXmlRootElement(localName = "A")
public class A {
}
Run Code Online (Sandbox Code Playgroud)
产生的输出是:
<A
xmlns="">
Run Code Online (Sandbox Code Playgroud)
我想在输出中添加一些名称空间,即
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com example.xsd"
如何配置A.java包含更多这样的自定义命名空间?
我正在将我的项目从 dropwizard 转移到 mirconuat,并且在使用 Web 服务响应时遇到异常。我尝试升级杰克逊版本,但失败并出现警告和以下原因。
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.OffsetDateTime` (no Creators, like default constructor, exist): no String-argument constructor/factory method to deserialize from String value ('2020-06-25T05:56:44.044423+08:00')
at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 206] (through reference chain: com.Port["_ModifiedAt"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1615)
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1077)
at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:371)
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:323)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1408)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:176)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:166)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:371)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeWithObjectId(BeanDeserializerBase.java:1288)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:162)
at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:2020)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1179)
at com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom(ProviderBase.java:810)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:256)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:235)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
at …Run Code Online (Sandbox Code Playgroud)