Spring是否内置了Jackson-如果是,则如何解析JSON

时间:2019-07-26 03:59:20

标签: spring spring-boot kotlin

我已经创建了一个Spring Boot应用程序。有人告诉我,Spring是Jackson附带的-但是,我看到的每个教程都将其添加为依赖项。

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

谢谢。

4 个答案:

答案 0 :(得分:0)

如果要创建JSON响应终结点,只需创建一个返回json的rest终结点。如果Springboot发现杰克逊是依赖项或类路径,它会自动为其余端点配置杰克逊消息转换器,因此,使剩余端点返回json响应所需要做的就是将杰克逊作为依赖项,而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>

答案 1 :(得分:0)

如果您使用Spring Boot,则jackson-databind依赖项将包含在spring-boot-starter-json模块中(该模块也包含在其他Spring Boot启动的模块中,例如spring-boot-starter-web)。

如果在依赖项中指定了启动程序模块,则可以使用Spring附带的杰克逊版本编写读写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,可以像上面的示例中一样使用。

答案 2 :(得分:0)

您只需在配置中通过@Autowired或构造函数注入已经在Spring中定义的ObjectMapper。例如:

@Configuration
public class SomeConfiguration {

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

答案 3 :(得分:0)

您可以使用ObjectMapper,首先通过以下方式添加杰克逊·科特林的支持

<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)

您可以从此topic中找到更多信息。