Spring 是否内置了杰克逊 - 如果是,如何解析 JSON



我创建了一个Spring Boot应用程序。有人告诉我,Spring 随 Jackson 一起提供 - 但是我看到的每个教程都显示将其添加为依赖项。

我想解析并创建一些 JSON - 是否有关于如何做到这一点的明确指南 - 使用 Spring 中的任何内容?

谢谢。

如果要创建一个 JSON 响应端点,您需要做的就是创建一个返回 json 的 rest 端点。Springboot 会自动为 rest 端点配置 jackson 消息转换器,如果它发现 jackson 是依赖项或类路径。因此,启用 rest 端点以返回 json 响应所需的只是将 jackson 作为依赖项,springboot 将通过自动配置处理其余部分。

默认情况下,Spring 或 springboot 在启动期间配置以下消息转换器:

ByteArrayHttpMessageConverter – converts byte arrays
StringHttpMessageConverter – converts Strings
ResourceHttpMessageConverter – converts org.springframework.core.io.Resource for any type of octet stream
SourceHttpMessageConverter – converts javax.xml.transform.Source
FormHttpMessageConverter – converts form data to/from a MultiValueMap<String, String>.
Jaxb2RootElementHttpMessageConverter – converts Java objects to/from XML
MappingJackson2HttpMessageConverter – converts JSON
MappingJacksonHttpMessageConverter – converts JSON
AtomFeedHttpMessageConverter – converts Atom feeds 
RssChannelHttpMessageConverter – converts RSS feeds

您可能需要添加的依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.8</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

如果你使用 Spring Boot,jackson-databind依赖项出现在 spring-boot-starter-json 模块中(它也包含在其他 Spring boot start 模块中,如 spring-boot-starter-web (。

如果您在依赖项中指定了入门模块,您将能够使用 Spring 附带的 jackson 版本编写读/写 json 程序。显式指定此依赖项的好习惯,因为功能可能会随着 Spring 更新而更改。

Spring Boot 的代码示例:

@Bean
public CommandLineRunner commandLineRunner(ApplicationContext applicationContext) {
    return args -> {
        String john = objectMapper().writeValueAsString(new User("John", 43));
        System.out.println(john);
    };
}
@Bean
public ObjectMapper objectMapper() {
    return new ObjectMapper();
}

更新:在 Spring 5.1.* org.springframework.spring-web依赖项中,还提供了 Jackson,并且可以像上面的例子一样使用。

你可以简单地通过配置中的@Autowired或构造函数注入已经在 Spring 中定义的 ObjectMapper。例如:

@Configuration
public class SomeConfiguration {
@Bean
public SomeService someService(ObjectMapper objectMapper) {
  return new SomeService(objectMapper);
}}

您可以使用 ObjectMapper,首先通过添加 jackson kotlin 支持

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-kotlin</artifactId>
    <version>2.9.8</version>
</dependency>

之后,您可以在项目中的任何位置创建 kotlin jackson 映射器实例,如下所示

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
val mapper = jacksonObjectMapper()

对于序列化:

val serialized = mapper.writeValueAsString(OBJECT)

对于反序列化:

mapper.readValue(json)

您可以从本主题中找到更多信息。

最新更新