CodeGym/ํ–‰๋™/All lectures for KO purposes/์žญ์Šจ์˜ ObjectMapper

์žญ์Šจ์˜ ObjectMapper

์‚ฌ์šฉ ๊ฐ€๋Šฅ

Jackson์€ Java ๊ฐœ์ฒด๋ฅผ ๋‹ค์–‘ํ•œ ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”ํ•˜๋Š” ๋ฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ObjectMapper ํด๋ž˜์Šค ๋Š” JSON ํ˜•์‹์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฃผ์š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ˜•์‹์˜ ๊ฒฝ์šฐ ์ž์†( XmlMapper , YAMLMapper ) ์ด ์žˆ์Šต๋‹ˆ๋‹ค . ์ƒ์† ๋•๋ถ„์— ๋‹จ์ผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“  ํ˜•์‹์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

jar ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ

์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ธฐ ์ „์— Jackson jar ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ IntelliJ IDEA์˜ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. jackson-databind ์˜ ์˜ˆ๋ฅผ ๋“ค์–ด ํ•„์š”ํ•œ ํŒŒ์ผ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. Maven ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์›น ์‚ฌ์ดํŠธ ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค .

  2. ๊ฒ€์ƒ‰ ์ƒ์ž์— " jackson-databind "๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์ฒซ ๋ฒˆ์งธ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ด€์‹ฌ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ๋”ฐ๋ผ๊ฐ€์‹ญ์‹œ์˜ค.

  4. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ์˜ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ์™€์˜ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด ๊ฐ•์˜๋ฅผ ์ž‘์„ฑํ•  ๋‹น์‹œ์—๋Š” 2.13.2.2์ž„). ๋งํฌ๋ฅผ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค.

  5. ์—ด๋ฆฌ๋Š” ํŽ˜์ด์ง€์—์„œ "๋ฒˆ๋“ค" ๋งํฌ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

  6. ์ด ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ jar ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค .

์œ ์‚ฌํ•œ ์ ˆ์ฐจ์— ๋”ฐ๋ผ ๋‚˜๋จธ์ง€ ํ•„์š”ํ•œ jar ํŒŒ์ผ์„ ์ฐพ์•„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ IntelliJ IDEA์˜ ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  1. ํ”„๋กœ์ ํŠธ ์„ค์ •์„ ์—ฝ๋‹ˆ๋‹ค( Ctrl+Alt+Shift+S ํ‚ค ์กฐํ•ฉ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ).

  2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค .

  3. +๋ฅผ ๋ˆ„๋ฅธ ๋‹ค์Œ "Java"๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค. ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์„ ๋ชจ๋‘ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋๋‚ด์•ผ ํ•  ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  4. ์ด๊ฒƒ์œผ๋กœ ์ค€๋น„ ์ž‘์—…์„ ๋งˆ์นฉ๋‹ˆ๋‹ค. ์ด์ œ ObjectMapper๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

JSON์œผ๋กœ ์ง๋ ฌํ™”

๋จผ์ € ์ผ๋ถ€ ๊ฐœ์ฒด๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค.

import com.fasterxml.jackson.databind.ObjectMapper;

class Book {
	public String title;
	public String author;
	public int pages;
}

public class Solution {
	public static void main(String[] args) throws Exception {
    	Book book = new Book();
    	book.title = "Good Omens";
    	book.author = "Pratchett T., Gaiman N.";
    	book.pages = 383;

    	ObjectMapper mapper = new ObjectMapper();
    	String jsonBook = mapper.writeValueAsString(book);
    	System.out.println(jsonBook);
	}
}

main์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

{"title":"์ข‹์€ ์ง•์กฐ","author":"Pratchett T., Gaiman N.","pages":383}

ObjectMapper ์—๋Š” ๋งŽ์€ ๊ณ ๊ธ‰ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSON ๋ฌธ์ž์—ด์„ ๋” ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ ํ›„๊ฐ์ฒด ๋งคํผ๋‹ค์Œ ๋ช…๋ น๋ฌธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

mapper.enable(SerializationFeature.INDENT_OUTPUT);

์ถœ๋ ฅ์˜ ์ •๋ณด๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์ง€๋งŒ ์ด์ œ ๋“ค์—ฌ์“ฐ๊ธฐ์™€ ์ค„ ๋ฐ”๊ฟˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "์ œ๋ชฉ": "์ข‹์€ ์ง•์กฐ",
  "์ €์ž": "Pratchett T., Gaiman N.",
 "ํŽ˜์ด์ง€": 383
}

JSON์—์„œ ์—ญ์ง๋ ฌํ™”

์ด์ œ ๋ฐ˜๋Œ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์„ ๊ฐœ์ฒด๋กœ deserializeํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก Book ํด๋ž˜์Šค ์—์„œ toString ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .

@Override
public String toString() {
	return "Book{" +
        	"title='" + title + '\'' +
        	", author='" + author + '\'' +
        	", pages=" + pages +
        	'}';
}

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” main ๋ฉ”์„œ๋“œ ์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค .

public static void main(String[] args) throws Exception {
	String jsonString = "{\"title\":\"Good Omens\",\"author\":\"Pratchett T., Gaiman N.\",\"pages\":383}";
	Book book = new ObjectMapper().readValue(jsonString, Book.class);
	System.out.println(book);
}

์‚ฐ์ถœ:

๋„์„œ{์ œ๋ชฉ='์ข‹์€ ์ง•์กฐ', ์ €์ž='Pratchett T., Gaiman N.', ํŽ˜์ด์ง€=383}

readValue ๋ฉ”์„œ๋“œ๋Š” ์˜ค๋ฒ„๋กœ๋“œ๋˜์–ด ํŒŒ์ผ, ๋งํฌ, ๋‹ค์–‘ํ•œ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ๋“ฑ์„ ์ทจํ•˜๋Š” ๋งŽ์€ ๋ณ€ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœ์„ฑ์„ ์œ„ํ•ด ์˜ˆ์ œ์—์„œ๋Š” JSON ๋ฌธ์ž์—ด์„ ํ—ˆ์šฉํ•˜๋Š” ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค .

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ObjectMapper ์—๋Š” ๋งŽ์€ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์•Œ ์ˆ˜ ์—†๋Š” ์†์„ฑ ๋ฌด์‹œ

JSON ๋ฌธ์ž์—ด์— Book ํด๋ž˜์Šค ์— ์—†๋Š” ์†์„ฑ์ด ์žˆ๋Š” ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค .

public static void main(String[] args) throws Exception {
	String jsonString = """
        	{
          	"title" : "Good Omens",
          	"author" : "Pratchett T., Gaiman N.",
          	"pages" : 383,
          	"unknown property" : 42
        	}""";
	ObjectMapper mapper = new ObjectMapper();
	Book book = mapper.readValue(jsonString, Book.class);
	System.out.println(book);
}

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด UnrecognizedPropertyException ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค . ์ด๊ฒƒ์€ ๊ธฐ๋ณธ ๋™์ž‘์ด์ง€๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ObjectMapper mapper =
new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

๋งŒ๋“ค ๋•Œ๊ฐ์ฒด ๋งคํผ๊ฐœ์ฒด์— ๋Œ€ํ•ด์„œ๋Š” configure ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์„ค์ •์„ false ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค . configure ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ๋œ ๊ฐœ์ฒด๋ฅผ ์ˆ˜์ •ํ•œ ๋‹ค์Œ ๋™์ผํ•œ ๊ฐœ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ด ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

๊ธฐ๋Šฅ๋ฉด์—์„œ ์ด ํ‘œ๊ธฐ๋ฒ•์€ ์ด์ „ ํ‘œ๊ธฐ๋ฒ•๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์ œ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด deserialization์ด ์„ฑ๊ณตํ•˜๊ณ  unknown ์†์„ฑ์ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

ํŽธ๋ฆฌํ•œ ์ฃผ์„

Jackson์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฐฉ์‹์œผ๋กœ ์ง๋ ฌํ™” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์œ ์šฉํ•œ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@JsonIgnore โ€” ์ด ์ฃผ์„์€ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ์ค‘์— ๋ฌด์‹œํ•ด์•ผ ํ•˜๋Š” ์š”์†Œ ์œ„์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

class Book {
	public String title;
	@JsonIgnore
	public String author;
	public int pages;
}

์—ฌ๊ธฐ์„œ์ž‘๊ฐ€ํ•„๋“œ๋Š” ์ง๋ ฌํ™” ์ค‘์— ๊ฒฐ๊ณผ JSON์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ญ์ง๋ ฌํ™” ์‹œ,์ž‘๊ฐ€ํ•„๋“œ๋Š” JSON์— ๋‹ค๋ฅธ ๊ฐ’์ด ์žˆ๋”๋ผ๋„ ๊ธฐ๋ณธ๊ฐ’(null)์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

@JsonFormat โ€” ์ด ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ง๋ ฌํ™”๋œ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Book ํด๋ž˜์Šค ์— Date ํ•„๋“œ๋ฅผ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .

class Book {
	public String title;
	public String author;
	public int pages;
	public Date createdDate = new Date();
}

์ง๋ ฌํ™” ํ›„ ๋‹ค์Œ JSON์„ ์–ป์Šต๋‹ˆ๋‹ค.

 {
  "title": "Good Omens",
  "author": "Pratchett T., Gaiman N.",
  "pages": 383,
  "createdDate": 1649330880788
}

๋ณด์‹œ๋‹ค์‹œํ”ผ ๋‚ ์งœ๊ฐ€ ์ˆซ์ž๋กœ ์—ฐ์žฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ˜•์‹์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

class Book {
	public String title;
	public String author;
	public int pages;
	@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
	public Date createdDate = new Date();
}

์ด์ œ ์ง๋ ฌํ™” ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
  "title": "Good Omens",
  "author": "Pratchett T., Gaiman N.",
  "pages": 383,
  "createdDate": "2022-04-07"
}

@JsonProperty โ€” ์ด ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ง๋ ฌํ™”๋œ ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์†์„ฑ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฃผ์„์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ง๋ ฌํ™” ์ค‘์— ๋ฐ˜ํ™˜ ๊ฐ’์ด JSON ์†์„ฑ์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

class Book {
	@JsonProperty("name")
	public String title;
	public String author;
	public int pages;

	@JsonProperty("quotedTitle")
	public String getQuotedTitle() {
    	    return "\"" + title + "\"";
	}
}

์ง๋ ฌํ™” ๊ฒฐ๊ณผ:

{
  "์ €์ž": "Pratchett T., Gaiman N.",
  "ํŽ˜์ด์ง€": 383,
  "์ด๋ฆ„": "์ข‹์€ ์ง•์กฐ",
  "quotedTitle": "\"์ข‹์€ ์ง•์กฐ\""
}

@JsonInclude โ€” ์ด ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง๋ ฌํ™”ํ•  ํ•„๋“œ์— ๋Œ€ํ•ด ์ถฉ์กฑํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ํ•„๋“œ ๋˜๋Š” ์ „์ฒด ํด๋ž˜์Šค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๊ฐœ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

public class Solution {
	public static void main(String[] args) throws Exception {
    		Book book = new Book();

    		ObjectMapper mapper = new ObjectMapper();
    		mapper.enable(SerializationFeature.INDENT_OUTPUT);
    		String jsonBook = mapper.writeValueAsString(book);
    		System.out.println(jsonBook);
	}
}

์ง๋ ฌํ™” ๊ฒฐ๊ณผ:

{
  "์ œ๋ชฉ": null,
  "์ €์ž": null,
  "ํŽ˜์ด์ง€": 0
}

์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@JsonInclude(JsonInclude.Include.NON_NULL)
class Book {
	public String title;
	public String author;
	public int pages;
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

{
  "ํŽ˜์ด์ง€" : 0
}

์ด์ œ null ์ธ ํ•„๋“œ๋Š” ์ง๋ ฌํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@JsonPropertyOrder โ€” ์ด ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•„๋“œ๊ฐ€ ์ง๋ ฌํ™”๋˜๋Š” ์ˆœ์„œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@JsonPropertyOrder({"author", "title", "pages"})
class Book {
	public String title;
	public String author;
	public int pages;
}

์ง๋ ฌํ™” ๊ฒฐ๊ณผ:

{
  "์ €์ž": "Pratchett T., Gaiman N.",
  "์ œ๋ชฉ": "Good Omens",
  "ํŽ˜์ด์ง€": 383
}

์ง€๊ธˆ์€ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”. ์ด ๋ชจ๋“ˆ์„ ๋งˆ์น˜๋ฉด ์ด๋“ค์— ๋Œ€ํ•ด ๋” ์ž˜ ์•Œ๊ฒŒ ๋˜๊ณ  ๊ณ ์œ ํ•œ ์ฃผ์„์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

XML์˜ ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™”

XML๋กœ ์ง๋ ฌํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ ์„ค์ •๊ณผ ์ฃผ์„์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์ฐจ์ด์ ์€๋งคํผ ๊ฐœ์ฒด:

public static void main(String[] args) throws Exception {
	Book book = new Book();
	book.title = "Good Omens";
	book.author = "Pratchett T., Gaiman N.";
	book.pages = 383;

	ObjectMapper mapper = new XmlMapper();
	mapper.enable(SerializationFeature.INDENT_OUTPUT);
	String xmlBook = mapper.writeValueAsString(book);
	System.out.println(xmlBook);
}

์‚ฐ์ถœ:

 <Book>
  <title>Good Omens</title>
  <author>Pratchett T., Gaiman N.</author>
  <pages>383</pages>
</Book>

XML ์—ญ์ง๋ ฌํ™”:

public static void main(String[] args) throws Exception {
   String xmlString = """
            <Book>
             <title>Good Omens</title>
             <author>Pratchett T., Gaiman N.</author>
             <pages>383</pages>
           </Book>""";
   ObjectMapper mapper = new XmlMapper();
   Book book = mapper.readValue(xmlString, Book.class);
   System.out.println(book);
}

YAML์˜ ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™”

XML์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ YAML์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

public static void main(String[] args) throws Exception {
	Book book = new Book();
	book.title = "Good Omens";
	book.author = "Pratchett T., Gaiman N.";
	book.pages = 383;

	ObjectMapper mapper = new YAMLMapper();
	mapper.enable(SerializationFeature.INDENT_OUTPUT);
	String yamlBook = mapper.writeValueAsString(book);
	System.out.println(yamlBook);
}

์‚ฐ์ถœ:

---
์ œ๋ชฉ: "Good Omens"
์ €์ž: "Pratchett T., Gaiman N."
ํŽ˜์ด์ง€: 383

YAML ์—ญ์ง๋ ฌํ™”:

public static void main(String[] args) throws Exception {
   String yamlString = """
           ---
           title: "Good Omens"
           author: "Pratchett T., Gaiman N."
           pages: 383""";
   ObjectMapper mapper = new YAMLMapper();
   Book book = mapper.readValue(yamlString, Book.class);
   System.out.println(book);
}
์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค