我在杰克逊的自定义反序列化器中遇到了问题.我想访问默认的序列化程序来填充我反序列化的对象.在人口之后,我将做一些自定义的事情,但首先我想用默认的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) 我试图使用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重载具有重载构造函数的类?
谢谢
是否有一种内置的方法只能在使用Jackson(rapidxml.jackson 2.1.1)时序列化孩子的id?我们想发送一个Order有Person参考的REST .然而,person对象非常复杂,我们可以在服务器端刷新它,所以我们只需要主键.
或者我需要一个自定义序列化器吗?或者我需要@JsonIgnore所有其他属性吗?这会阻止Person数据在请求Order对象时被发回吗?我不确定我是否需要它,但如果可能的话我想控制它...
我按名称获取类,我需要使用相应的数据更新它们,我的问题是如何使用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) 浏览文档和源代码,我没有看到明确的方法来做到这一点.好奇,如果我错过了什么.
假设我从服务器响应中收到一个InputStream.我从这个InputStream创建一个JsonParser.预计服务器响应是包含有效JSON的文本,例如:
{"iamValidJson":"yay"}
但是,如果响应最终是无效的JSON或根本不是JSON,例如:
Some text that is not JSON
JsonParser最终会抛出异常.在这种情况下,我希望能够Some text that is not JSON从JsonParser中提取底层的无效文本" ",以便它可以用于其他目的.
我无法将其从InputStream中拉出来,因为它不支持重置,并且JsonParser的创建会消耗它.
有没有办法做到这一点?
使用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.
任何想法将不胜感激.谢谢!
我使用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 ×7
jackson ×6
json ×5
accessor ×1
android ×1
hibernate ×1
inputstream ×1
reflection ×1
spring ×1