标签: fasterxml

jackson fasterxml将名称空间添加到根元素

如果我有班级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包含更多这样的自定义命名空间?

java xml namespaces jackson fasterxml

7
推荐指数
1
解决办法
881
查看次数

com.fasterxml.jackson.databind.JsonMappingException:杰克逊版本太旧2.5.3

我的操作系统是OS X 10.11.6.我正在运行Spark 2.0,Zeppelin 0.6,Scala 2.11

当我在Zeppelin中运行此代码时,我得到了Jackson的例外.当我在spark-shell中运行此代码时 - 没有例外.

val filestream = ssc.textFileStream("/Users/davidlaxer/first-edition/ch06")

com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.5.3
  at com.fasterxml.jackson.module.scala.JacksonModule$class.setupModule(JacksonModule.scala:56)
  at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)
  at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:651)
  at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82)
  at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala)
  at org.apache.spark.streaming.StreamingContext.withNamedScope(StreamingContext.scala:273)
  at org.apache.spark.streaming.StreamingContext.textFileStream(StreamingContext.scala:413)
  ... 51 elided
Run Code Online (Sandbox Code Playgroud)

spark-core中的dependency-reduced-pom.xml显示了2.6.5版本

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.6.5</version>
      <scope>compile</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

Maven的版本是:

David-Laxers-MacBook-Pro:2.5.3 davidlaxer$ mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T08:41:47-08:00)
Maven home: /opt/local/share/java/maven3
Java version: 1.8.0_05, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.6", arch: …
Run Code Online (Sandbox Code Playgroud)

maven-2 fasterxml apache-spark spark-streaming apache-zeppelin

7
推荐指数
1
解决办法
7399
查看次数

以编程方式更改JsonProperty(Access.WRITE_ONLY)

我的Java对象有一些注释只写入的字段,因为它们不应该通过REST接口发送给用户.

  @JsonProperty(access = Access.WRITE_ONLY)
  private List<Integer> integerList;
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试实现一个admin-controller,应该发送这些字段.我的问题是,我可以使用控制器中的代码更改属性,还是必须为此目的创建新对象,而目标字段不再被注释.我认为这不是一个干净的解决方案,所以我想我在这里错过了一些FasterXML Jackson功能..

在此先感谢您的帮助,

Codehai

java jackson fasterxml spring-boot

7
推荐指数
1
解决办法
624
查看次数

Jackson 自定义 JsonSerializer - 有条件地调用默认序列化器

我想要的是有条件地为类的对象使用默认的 BeanSerializer:

class MyCustomSerializer extends StdSerializer<AbstractEntity> {

    public MyCustomSerializer() {
        super(AbstractEntity.class);
    }

    @Override
    public void serialize(AbstractEntity o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (someCondition()) {
           serializeNormalWay(); //how?
        } else {
           //custom serialization
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过做类似的事情:

serializerProvider.defaultSerializeValue(o, jsonGenerator);
Run Code Online (Sandbox Code Playgroud)

但这调用了 MyCustomSerializer 的方法,并且我有永无休止的递归。如何获得可用于普通 bean 序列化的适当 Serializer 对象?

java serialization json jackson fasterxml

6
推荐指数
1
解决办法
3802
查看次数

Java日历的序列化

如何通过扩展json为java Calendar创建自定义序列化serializer<Calendar>

我尝试了相同的java.until.Date,它的工作.在序列化方法中,我将Date转换为String并以json格式写入.

为java.util.Date完成的示例代码类似于下面给出的代码

  public class CDJsonDateSerializer extends JsonSerializer<Date>{
  @Override
  public void serialize(Date date, JsonGenerator jsonGenerator,SerializerProvider provider)
 throws IOException {

      SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
      String dateString = dateFormat.format(date);
     jsonGenerator.writeString(dateString);
 }
}
Run Code Online (Sandbox Code Playgroud)

它是这样使用的:

 @JsonSerialize(using = CDJsonDateSerializer.class)
 private Date startDate;
Run Code Online (Sandbox Code Playgroud)

如何在java到json中序列化日历而不丢失Calendar对象中的数据?

java json java-ee fasterxml

6
推荐指数
1
解决办法
6420
查看次数

使用 schema 和 json 类型将 csv 直接转换为 json

问题:您可以使用 CsvMapper/CsvSchema 将 csv 转换为map<string, object>对象不是字符串的对象,例如布尔值或整数吗?

详细信息:我有一些 csv 文件,我想将它们直接转换为 json。我无权访问 POJO。但我确实有一个 xml 架构文件,其中包含 csv 数据中列的类型信息。

经过一些搜索后,我决定使用 Jackson 的 CsvMapper/CsvSchema 将 csv 文件转换为 json。我创建了一个包含列类型信息的 CsvSchema,然后将 csv 文件转换为 Map<> 文件,然后将映射文件转换为 json。除了一件事之外,一切都运行良好。所有 json 属性都是字符串,甚至 CsvSchema 定义为布尔和数字类型的属性也是如此。下面是一个小片段,显示了我正在做的事情。

String csvEmployeeData="\"Bob\",25,true\n" +
                       "\"Joe\",35,false\n" +
                       "\"Tom\",45,false\n";

CsvSchema schema = CsvSchema.builder().addColumn("name", ColumnType.String)
                                      .addColumn("age", ColumnType.NUMBER)
                                      .addColumn("isManager", ColumnType.BOOLEAN)
                                      .build();

CsvMapper csvMapper = new CsvMapper();
MappingIterator<Map<String, ? extends Object>> it = csvMapper.readerFor(Map.class)
                                                      .with(schema)                                                        
                                                      .readValues(csvEmployeeData);
List<Map<String, ? extends Object>> objectList=it.readAll();
Map<String, ? extends Object> employeeObj=objectList.get(0);

assertEquals("java.lang.Integer", employeeObj.get("age").getClass().getTypeName());
// …
Run Code Online (Sandbox Code Playgroud)

java csv json jackson fasterxml

6
推荐指数
0
解决办法
1573
查看次数

无法从 START_OBJECT 令牌反序列化 `java.lang.String` 的实例

我收到以下错误消息,有人可以帮忙或建议如何最好地调试它。

无法java.lang.String在 [Source: (PushbackInputStream);反序列化超出 START_OBJECT 令牌的实例;行:1,列:37610](通过参考链:com.model.ProductList["products"]->java.util.ArrayList[23]->com.model.Product["price"]->com.Price [“现在”])

我正在尝试从 REst API 调用反序列化 Products 对象。代码一直运行良好,直到我添加了反序列化 Price 子类的代码。这看起来如下,

"price": {
        "was": "",
        "then1": "",
        "then2": "",
        "now": "59.00",
        "uom": "",
        "currency": "GBP"
      },
Run Code Online (Sandbox Code Playgroud)

我的价格 pojo 如下所示,

public class Price {

     @JsonProperty("was")
     String was;
     @JsonProperty("then1")
     String then1;
     @JsonProperty("then2")
     String then2;
     @JsonProperty("now")
     String now;
     @JsonProperty("uom")
     String uom;
     @JsonProperty("currency")
     String currency;

     public Price() {
         //blank constructor for JSON
     }

     @Override
     public String toString() {
         return "Price{" +
                 "was='" + was + '\'' +
                 ", …
Run Code Online (Sandbox Code Playgroud)

java fasterxml spring-boot

6
推荐指数
1
解决办法
4万
查看次数

将 ArrayList 内的对象序列化为 XML 时丢失类型元素

我在使用 Jackson 序列化为 XML 时似乎遇到了问题。我的代码如下:

测试容器

package com.test;

import java.util.ArrayList;

import com.fasterxml.jackson.annotation.JsonProperty;

public class TestContainer {

    private String testContainerID;
    private String testContainerMessage;
    private ArrayList<TestChild> testContainerChildren;

    @JsonProperty("TestContainerID")
    public String getTestContainerID() {
        return testContainerID;
    }

    @JsonProperty("TestContainerID")
    public void setTestContainerID(String testContainerID) {
        this.testContainerID = testContainerID;
    }

    @JsonProperty("TestContainerMessage")
    public String getTestContainerMessage() {
        return testContainerMessage;
    }

    @JsonProperty("TestContainerMessage")
    public void setTestContainerMessage(String testContainerMessage) {
        this.testContainerMessage = testContainerMessage;
    }

    @JsonProperty("TestContainerChildren")
    public ArrayList<TestChild> getTestContainerChildren() {
        return testContainerChildren;
    }

    @JsonProperty("TestContainerChildren")
    public void setTestContainerChildren(ArrayList<TestChild> testContainerChildren) {
        this.testContainerChildren = testContainerChildren;
    }

} …
Run Code Online (Sandbox Code Playgroud)

xml-serialization jackson fasterxml json-deserialization

5
推荐指数
1
解决办法
3800
查看次数

使用Jackson进行反序列化时,将一些JSON字段保留为String

我使用com.fasterxml.jackson.databind改造,以处理来自服务器在我的Android应用程序的响应.

由于JSONObject响应太复杂并且包含很多JSONArray,我希望能够将其中一些数组字段解析为String,而不是为这些Array可能包含的每个子对象创建POJO.

有没有办法告诉杰克逊将这些字段保留为字符串而不是将它们解析为实体?

android json jackson fasterxml retrofit2

5
推荐指数
0
解决办法
444
查看次数

ZonedDateTime 使用 FasterXML Jackson 序列化纪元毫秒

我打算使用纪元毫秒进行反序列化和序列化。然而,只有反序列化有效,但未能序列化回正确的ZonedDateTime.

ObjectMapper mapper = new ObjectMapper();
mapper.setTimeZone(TimeZone.getDefault());
mapper.registerModule(new JavaTimeModule());
mapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false);

System.out.println(mapper.writeValueAsString(ZonedDateTime.now()));  // print 1493703996728 [Expected]
System.out.println(mapper.readValue("1493703996728", ZonedDateTime.class)); // print +49303-08-07T00:52:08+08:00[Asia/Singapore] [Unexpected]
Run Code Online (Sandbox Code Playgroud)

如何使序列化以获取日期2017-05-02T13:46:36.728+08:00[Asia/Singapore]

com.fasterxml.jackson.* 的版本都是 2.8.8

java jackson java-8 fasterxml zoneddatetime

5
推荐指数
1
解决办法
1534
查看次数