相关疑难解决方法(0)

如何从Jackson中的自定义反序列化器调用默认反序列化器

我在杰克逊的自定义反序列化器中遇到了问题.我想访问默认的序列化程序来填充我反序列化的对象.在人口之后,我将做一些自定义的事情,但首先我想用默认的jackson行为反序列化对象.

这是我目前的代码.

public class UserEventDeserializer extends StdDeserializer<User> {

  private static final long serialVersionUID = 7923585097068641765L;

  public UserEventDeserializer() {
    super(User.class);
  }

  @Override
  @Transactional
  public User deserialize(JsonParser jp, DeserializationContext ctxt)
      throws IOException, JsonProcessingException {

    ObjectCodec oc = jp.getCodec();
    JsonNode node = oc.readTree(jp);
    User deserializedUser = null;
    deserializedUser = super.deserialize(jp, ctxt, new User()); 
    // The previous line generates an exception java.lang.UnsupportedOperationException
    // Because there is no implementation of the deserializer.
    // I want a way to access the default spring deserializer for my …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jackson

92
推荐指数
7
解决办法
4万
查看次数

如何使用JsonCreator对具有重载构造函数的类进行反序列化

我试图使用Jackson 1.9.10反序列化该类的实例:

public class Person {

@JsonCreator
public Person(@JsonProperty("name") String name,
        @JsonProperty("age") int age) {
    // ... person with both name and age
}

@JsonCreator
public Person(@JsonProperty("name") String name) {
    // ... person with just a name
}
}
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,我得到以下内容

冲突的基于属性的创建者:已经有... {interface org.codehaus.jackson.annotate.JsonCreator @ org.codehaus.jackson.annotate.JsonCreator()}],遇到......,注释:{interface org.codehaus. jackson.annotate.JsonCreator @ org.codehaus.jackson.annotate.JsonCreator()}]

有没有办法使用Jackson重载具有重载构造函数的类?

谢谢

java json jackson

73
推荐指数
3
解决办法
5万
查看次数

如何仅使用Jackson序列化孩子的ID

是否有一种内置的方法只能在使用Jackson(rapidxml.jackson 2.1.1)时序列化孩子的id?我们想发送一个OrderPerson参考的REST .然而,person对象非常复杂,我们可以在服务器端刷新它,所以我们只需要主键.

或者我需要一个自定义序列化器吗?或者我需要@JsonIgnore所有其他属性吗?这会阻止Person数据在请求Order对象时被发回吗?我不确定我是否需要它,但如果可能的话我想控制它...

java serialization json jackson

53
推荐指数
1
解决办法
2万
查看次数

使用反射设置对象属性

我按名称获取类,我需要使用相应的数据更新它们,我的问题是如何使用java我想要添加方法一些虚拟数据.我不知道类类型我只是获取类名并使用反射来获取他的数据

我使用此代码来获取类实例和

Class<?> classHandle = Class.forName(className);

Object myObject = classHandle.newInstance();

// iterate through all the methods declared by the class
for (Method method : classHandle.getMethods()) {
    // find all the set methods
    if (method.getName().matches("set[A-Z].*")
Run Code Online (Sandbox Code Playgroud)

并且知道我找到了我想用数据更新它的set方法的列表我该怎么做.

假设在类名中我得到了人,而且类有setSalary和setFirstName等我怎样才能用反射设置它们?

public class Person {

    public void setSalery(double salery) {
        this.salery = salery;
    }

    public void setFirstName(String FirstName) {
        this.FirstName = FirstName;
    }   
}
Run Code Online (Sandbox Code Playgroud)

java reflection accessor

25
推荐指数
2
解决办法
7万
查看次数

如何从JsonParser获取底层字符串(Jackson Json)

浏览文档和源代码,我没有看到明确的方法来做到这一点.好奇,如果我错过了什么.

假设我从服务器响应中收到一个InputStream.我从这个InputStream创建一个JsonParser.预计服务器响应是包含有效JSON的文本,例如:

{"iamValidJson":"yay"}

但是,如果响应最终是无效的JSON或根本不是JSON,例如:

Some text that is not JSON

JsonParser最终会抛出异常.在这种情况下,我希望能够Some text that is not JSON从JsonParser中提取底层的无效文本" ",以便它可以用于其他目的.

我无法将其从InputStream中拉出来,因为它不支持重置,并且JsonParser的创建会消耗它.

有没有办法做到这一点?

java android json inputstream jackson

18
推荐指数
3
解决办法
2万
查看次数

Jackson - 将属性序列化/反序列化为JSON值

使用Jackson 2,我正在寻找一种通用的方法将对象序列化为单个值(然后将它们序列化,以后只填充该单个字段),而不必重复创建JsonSerializer/JsonDeserializer来处理每个案例.@JsonIdentityInfo注释非常接近但是稍微错过了标记,因为据我所知,它将始终在第一次出现时序列化完整的子对象.

这是我想要做的一个例子.鉴于课程:

class Customer {

    Long id = 99;
    String name = "Joe"; 
    // Lots more properties
}

class Order {
    String orderNum = "11111"
    @WhateverAnnotationsINeedHereToDoWhatIWant
    Customer customer;
}
Run Code Online (Sandbox Code Playgroud)

我想将Order序列化为(要么我完全可以接受):

{"orderNum":"11111", "customer":"99"}
{"orderNum":"11111", "customer":{"id":99}}
Run Code Online (Sandbox Code Playgroud)

@JsonIdentityInfo的作用使得在客户端处理更加困难(我们可以假设客户端知道如何将客户ID映射回完整的客户信息).

对于显示的第二个JSON,@ JsonIgnoreProperties也可能非常接近,但这意味着我必须选择退出除了我想要的一切之外的所有东西.

当我反序列化时,我只希望客户仅使用"id"字段进行初始化.

任何神奇的方式来做到这一点,我错过了没有进入杰克逊的汤内部?据我所知,JsonDeserializer/JsonSerializer没有关于父级的上下文信息,因此似乎没有一种简单的方法来创建@JsonValueFromProperty("id")类型Jackson Mix-in然后只看一下该注释自定义Serializer/Deserializer.

任何想法将不胜感激.谢谢!

java json jackson

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

使用不带注释的@JsonIdentityInfo

我使用Jackson 2.2.3将POJO序列化为JSON。然后我遇到了一个问题,就是我无法序列化递归结构...我通过使用@JsonIdentityInfo=> 解决了这个问题,效果很好。

但是,我不希望此注释位于POJO的顶部。

所以我的问题是:还有其他可能性设置我的默认行为ObjectMapper以对每个POJO使用该功能吗?

所以我想转换这个注释代码

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
Run Code Online (Sandbox Code Playgroud)

ObjectMapper om = new ObjectMapper();
om.setDefaultIdentityInfo(ObjectIdGenerators.IntSequenceGenerator.class, "@id");
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java serialization json jackson

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