我创建了一个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)
您可以从本主题中找到更多信息。