首先,让我提前感谢你所有的帮助!
让我解释一下我目前的问题:
我试图用rest/json/swagger层包装一些遗留web服务调用。事实上,这些旧服务使用了一种棘手的专有xml格式,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<service_RegistroEventoSrv>
<inputMap type="map">
<mensajeMT type="map">
<identificador type="String">
<_value_>USUPRUEBA</_value_>
</identificador>
<modo type="String">
<_value_>1</_value_>
</modo>
</mensajeMT>
</inputMap>
</service_RegistroEventoSrv>
我能够序列化大多数对象和字段,但根标记有问题。用于序列化的主要类如下所示,但我需要根标记从“serviceId”属性中获取其值
public class CafRequestObject<I,O> {
private String serviceId;
private I inputMap;
private O outputMap;
private RequestMetaInfo requestMetaInfo;
private ResponseMetaInfo responseMetaInfo;
... getters and setters
}
为了实现这种复杂的自定义序列化,我在jackson XmlMapper for spring rest模板中添加了一些序列化。
public class CafRequestObjectSerializer extends CafXsdSerializer<CafRequestObject> {
public void serialize(CafRequestObject value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException {
final ToXmlGenerator xgen = (ToXmlGenerator) jgen;
xgen.writeStartObject();
addRequestMetaInfo(value.getRequestMetaInfo(),xgen);
addObject(value.getInputMap(), xgen,INPUT_MAP);
xgen.writeEndObject();
}
}
有没有办法从字段值中获取根名称?这在我的情况下是强制性的,因为每次调用都必须有不同的根值(所以我没有JsonRootName或XmlRootName)
提前多谢!
我终于找到了解决办法。也许这不是最好的,但至少对我有用:)
我扩展了jackson的类XmlSerializerProvider并重写了方法
序列化值。
有一部分代码执行以下操作:
QName rootName = _rootNameFromConfig();
if (rootName == null) {
rootName = _rootNameLookup.findRootName(cls, _config);
}
我修改了它的原始行为,以便根据我的根类字段改变它获取根标记的方式:
QName rootName = _rootNameFromConfig();
if (rootName == null) {
if (value instanceof CafRequestObject){
rootName= getRootNameFromServiceId((CafRequestObject)value);
}
else{
rootName = _rootNameLookup.findRootName(cls, _config);
}
}
protected QName getRootNameFromServiceId(CafRequestObject object){
return new QName( object.getServiceId()+_SERVICE);
}
谢谢你的帮助!
我整天都在寻找答案,但到目前为止我还没有太多的运气。 我的问题很简单:如何使用Jackson正确反序列化匿名对象。 它的输出是:JSON=[“com.foo.test.JacksonTest$1”,{“value”:5}],然后我得到一个异常: 线程“main”com.fasterxml.jackson.databind.JSONMappingException中出现异常:无法将类com.foo.
我希望获得以下输出:(我所要做的就是删除字段名,但保留其子字段名。) 以下是我的POJO,由使用: 下面是MAP在搜索过程中使用的我的: null 是否有一种方法可以使它与和一起使用,因为我不能同时使用这两种方法。 有人能帮忙解决这个问题吗?请指导我适当的文档或变通方法,非常感谢。
我和杰克逊有一个问题,我认为这个问题应该很容易解决,但它正在折磨我。 假设我有一个java POJO类,看起来像这样(假设我有getter和setter): 我想反序列化看起来像这样的JSON到一个User对象: Jackson给了我一些问题,因为User不是JSON中的第一级对象。我显然可以创建一个UserWrapper类,它有一个用户对象,然后使用它反序列化,但我知道一定有一个更优雅的解决方案
我只是想序列化和反序列化简单的不可变对象,不明白为什么我不能用Jackson来做 它会因异常而失败: 我知道答案应该很简单,但这是最常见的情况,应该从盒子里起作用,不是吗?
使用Jackson将JSON响应反序列化为DTO。 使用Gson或Jackson反序列化JSON时忽略空字段 他们仍然从那个不规则的JSON对象创建一个对象。 这意味着我需要遍历这个列表,并通过实现一个清理方法删除所有不具有属性“value”的对象。 我的带有Jackson注释的DTO: 给定JSON响应的结果是初始化了3个DTOs,而不是4个。
我有以下xml 我需要将其反序列化为以下POJO: 这里的问题是被包装在元素中