当前位置: 首页 > 知识库问答 >
问题:

Spring boot jackson-使用根名反序列化Json

农弘毅
2023-03-14
{
    "user": {
        "name": "Ram",
        "age": 27
    }
}
public class User {
    private String name;
    private int age;

    // getters & setters
}
@Configuration
public class JacksonConfig {

    @Bean
    public Jackson2ObjectMapperBuilder jacksonBuilder() {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.featuresToEnable(DeserializationFeature.UNWRAP_ROOT_VALUE);
        return builder;
    }
}
{
 "name": "Ram",
 "age": 27
}

我想用Spring靴的方式来做这件事。

共有1个答案

公羊新
2023-03-14

使用ObjectMapper可以很容易地解决这个问题。下面是您必须做的:-如下所示注释User类

@JsonRootName("user")
    public class User {
    private String name;
    private int age;

        // getters & setters
    }

>

  • 创建CustomJsonMapper类

    public class CustomJsonMapper extends ObjectMapper {
    
        private DeserializationFeature deserializationFeature;
    
        public void setDeserializationFeature (DeserializationFeature  deserializationFeature) {
            this.deserializationFeature = deserializationFeature;
            enable(this.deserializationFeature);
        }
    }
    

    等效Spring配置

    <bean id="objectMapper" class=" com.cognizant.tranzform.notification.constant.CustomJsonMapper">
        <property name="deserializationFeature" ref="deserializationFeature"/>
    </bean>
    <bean id="deserializationFeature" class="com.fasterxml.jackson.databind.DeserializationFeature"
          factory-method="valueOf">
        <constructor-arg>
            <value>UNWRAP_ROOT_VALUE</value>
        </constructor-arg>
    </bean>
    
    ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        ObjectMapper objectMapper = (ObjectMapper) context
                .getBean("objectMapper");
        String json = "{\"user\":{ \"name\": \"Ram\",\"age\": 27}}";
        User user = objectMapper.readValue(json, User.class);
    

  •  类似资料:
    • 问题内容: 我是C ++的新手。使用序列化和反序列化类型数据的最简单方法是什么。我发现了一些使用示例,但它们对我来说是晦涩的。 问题答案: 请注意,将键解释为路径,例如,将对“ ab” =“ z”放置将创建{“ a”:{“ b”:“ z”}} JSON,而不是{“ ab”:“ z”} 。否则,使用是微不足道的。这是一个小例子。

    • 问题内容: 可以说我有以下格式的JSON: 我试图避免自定义反序列化器,并尝试将上述JSON(称为Wrapper.java)反序列化为Java POJO。“类型”字段指示“对象”反序列化,即。type = foo表示使用Foo.java反序列化“ object”字段。(如果type = Bar,则使用Bar.java反序列化对象字段)。元数据/所有者将始终使用相同的反序列化方式,每个方法都使用一个

    • 有没有一种方法可以指定不同的序列化/反序列化JSON字段名,而不必显式地写出getter和setter方法,或许可以使用lombok getter和setter? 与此示例类似,下面的代码允许将传入的JSON反序列化为不同的POJO字段名。它还会使POJO字段名序列化为: 但这当然是不成立的。

    • 问题内容: 我正在尝试反序列化来自API的JSON响应。JSON如下所示(MAC地址和位置已更改): 问题在于措施措施。由于对象的名称正在更改,因此我不知道如何将其正确反序列化为C#对象。我在这里发现使用字典的解决方案存在类似问题,但是如果以这种方式尝试,我只会得到空目录。 这是我的反序列化方法: 这是APIResponse类: 有什么方法可以轻松地适当地反序列化这些措施吗? 问题答案: 看来您应

    • 假设我有以下格式的JSON: 我试图避免自定义反序列化程序,并试图将上述JSON(称为Wrapper.java)反序列化为JavaPOJO。“type”字段指示“object”反序列化,即type=foo表示使用foo.java反序列化“object”字段。(如果type=Bar,则使用Bar.java反序列化对象字段)。Metadata/owner将始终以相同的方式对每个元数据使用简单的带Jac

    • 我需要一个自定义反序列化器来在复杂的POJO中转换字符串。反序列化工作直到使用反序列化器:特别是使用自定义反序列化器时,我的对象的非对象属性不会序列化。 我有一个restful Web服务,它有一个pojo作为参数。 所以我的类PreentivoWs需要一个方法。这里是类定义: 在jsonObject中,我有一个枚举定义为 但此对象需要转换反序列化程序: 并在财产上标注: fromString方法