2020年10月5日月曜日

Sprint Boot で Jackson を使う

試していきます。

前提

  • OS: Windows 10 Pro
  • Docker: Docker version 19.03.13, build 4484c46d9d
    • 使用イメージ: mikoto2000/openjdk:15
  • Java: openjdk 15 2020-09-15

プロジェクト作成

Spring Initializr で作成。

ここ を参照。

依存関係追加

pom.xml に Jackson の依存関係を追加。

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.3</version>
        </dependency>

処理実装

まず、 JacksonApplication.java 全体を載せる。

package dev.mikoto2000.study.jackson;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

import lombok.Data;

@SpringBootApplication
public class JacksonApplication {

    @Autowired
    private ObjectMapper jacksonObjectMapper;

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(JacksonApplication.class, args);
        JacksonApplication app = context.getBean(JacksonApplication.class);
        app.process(args);
    }

    public void process(String... args) throws JsonProcessingException {

        String userStringOrig = """
                                {
                                    "id": 0,
                                    "name": "mikoto2000"
                                }
                                """;

        // JSON 文字列からオブジェクトへの変換
        User user = jacksonObjectMapper.readValue(userStringOrig, User.class);
        System.out.println(user);

        // オブジェクトから JSON 文字列への変換
        String userString = jacksonObjectMapper.writeValueAsString(user);
        System.out.println(userString);

    }

    @Bean
    public ObjectMapper mapper() {
        return new ObjectMapper();
    }

}

@Data
class User {
    Long id;
    String name;
}

ObjectMapper の設定

JacksonApplication クラスに、以下修正を行う。

@Autowired できるように(?)、 ObjectMapper を返却する mapper メソッドを追加。

    @Bean
    public ObjectMapper mapper() {
        return new ObjectMapper();
    }

@Autowired で Jackson の ObjectMapper クラスをマッピング。

    @Autowired
    private ObjectMapper jacksonObjectMapper;

変換主処理

readValue, writeValueAsString を使って、オブジェクトと JSON 文字列の変換を行う。

    public void process(String... args) throws JsonProcessingException {

        String userStringOrig = """
                                {
                                    "id": 0,
                                    "name": "mikoto2000"
                                }
                                """;

        // JSON 文字列からオブジェクトへの変換
        User user = jacksonObjectMapper.readValue(userStringOrig, User.class);
        System.out.println(user);

        // オブジェクトから JSON 文字列への変換
        String userString = jacksonObjectMapper.writeValueAsString(user);
        System.out.println(userString);

    }

ログ出力設定

src/main/resources/application.yaml

spring:
  main:
    banner-mode: off

src/main/resources/logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern>
        </encoder>
    </appender>
    <root level="ERROR">
        <appender-ref ref="CONSOLE_APPENDER"/>
    </root>
</configuration>

で、完成したものがこちら。

参考資料

1 件のコメント:

  1. おはようございます。

    便利なライブラリですよね。

    返信削除