저는 취미생활(?)의 일환으로 네이버 지식인에 답변을 달아주고 있습니다. (현재 무려 바람신😎) 제가 대학생 때는 현재 창업한 회사에서 CTO로 활동하다가 모든 일을 맡아서 해야하는 실장이 되어버린 실력자 친구가 있었기 때문에 잘 모르면 무조건 그 친구에게 쪼르르 달려가서 질문을 하곤 했습니다. 하지만 그 친구를 만난 건 3학년 2학기.. 그 전까지는 고만고만한 친구들과 수업을 제끼고 당구를 치러 가는 게 더 좋았고, 그 친구들이 다 군대가고 나서는 혼자서 질문할 곳이 없어서 많이 힘들어하고 결국엔 휴학까지 했었습니다. 지식인에 올라오는 모든 질문이 저렇게 절박한 처지에 있는 사람이 올리는 글은 아니겠지만 혹시나 그런 처지에 있는 사람이 기댈 곳이 없어서 질문을 했을 수도 있기 때문에(?) 오지랖을 부려..
소스부터 보시죠! import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FileDownloader { public static void main(String[] args) throws IOException { URL website = new URL("https://www.naver.com/"); Re..
map.toString을 검색해서 들어오시는 분들이 많은 거 같아 간단히 설명을 추가합니다. Map 인터페이스의 구현체(대표적으로 HashMap 등)에서 toString을 호출하면 내부적으로 Map을 탐색하는 Iterator를 만들어 각 Entry를 key=value 형식의 문자열로 변환해줍니다. import java.util.HashMap; import java.util.List; import java.util.Map; class Scratch { public static void main(String[] args) { Map map = new HashMap(); map.put("boolean", true); map.put("list", List.of("a", "b", "c")); map.put("in..

모든 소스는 여기서 확인하실 수 있습니다. Optional을 Jackson을 이용해 Serialize/Deserialize하면 어떻게 될까요? Optional 필드를 가지는 Object 하나의 Optional 필드를 가지는 Name이라는 클래스를 생성하였습니다. package io.lcalmsky.jackson.domain; import lombok.AccessLevel; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Optional; public class BeanWithOptional { @Data @NoArgsConstructor(access = AccessLevel.PROTECTED) public static class..

모든 소스는 여기서 확인하실 수 있습니다. 커스텀 애노테이션 (@JacksonAnnotationInside) @JacksonAnnotationInside 애노테이션을 사용하여 커스텀 애노테이션을 정의할 수 있습니다. package io.lcalmsky.jackson.domain.annotation; import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import java.lang.annotation.Retention; import java.l..
모든 소스는 여기서 확인하실 수 있습니다. @JsonProperty JSON에서의 속성 이름을 나타냅니다. 필드 변수 또는 getter/setter 메소드에 사용할 수 있습니다. package io.lcalmsky.jackson.domain; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.Setter; public class BeanWithJsonProperty { @Getter @Setter @JsonProperty("identity") private int id; private String name; @JsonProperty("nickname") public String getName()..
모든 소스는 여기서 확인하실 수 있습니다. Jackson에서 다형성 처리를 위하여 아래와 같은 애노테이션을 사용합니다. @JsonTypeInfo: 직렬화 시 포함할 타입 정보의 세부 사항을 나타냅니다. @JsonSubTypes: 애노테이션이 달린 타입의 하위 타입을 지정합니다. @JsonTypeName: 애노테이션이 달린 타입의 논리적 이름을 지정합니다. package io.lcalmsky.jackson.domain; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; ..
모든 소스는 여기서 확인하실 수 있습니다. @JsonIgnoreProperties @JsonIgnoreProperties는 Jackson이 무시할 속성 또는 속성 리스트를 나타냅니다. 문자열 배열 형식으로 나타낼 수 있습니다. package io.lcalmsky.jackson.domain; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AccessLevel; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor(access = AccessLevel.PROTECTED) @JsonIgnoreProperties("password") pu..

모든 소스는 여기서 확인하실 수 있습니다. @JsonCreator 역 직렬화에 사용되는 생성자나 팩토리를 조정할 수 있습니다. 필요한 대상 엔터티와 정확히 일치하지 않는 일부 JSON을 역 직렬화해야 할 때 유용합니다. 아래와 같은 JSON이 존재하고 { "id": 1, "theName": "beanName" } 대상 엔터티에는 "theName" 필드가 존재하지 않지만 엔터티 자체를 변경하고 싶지 않을 때 생성자에 @JsonCreator주석을 달고 @JsonProperty를 사용하여 해결할 수 있습니다. package io.lcalmsky.jackson.domain; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jac..

모든 소스는 여기서 확인하실 수 있습니다. Jackson Serialization jackson이 제공하는 직렬화(serialization) 애노테이션에 대해 알아봅시다. @JsonAnyGetter Map 필드를 표준 property로 사용할 수 있는 유연성을 제공합니다. package io.lcalmsky.jackson_test.domain; import com.fasterxml.jackson.annotation.JsonAnyGetter; import java.util.HashMap; import java.util.Map; public class ExtendableBean { public String name; private Map properties; public ExtendableBean(Strin..
- Total
- 71,764
- Today
- 127
- Yesterday
- 133
- spring boot application
- JSON
- Spring Boot Tutorial
- spring boot app
- 스프링 부트 웹 애플리케이션
- 스프링 부트 jwt
- gRPC
- Spring Data JPA
- 스프링 부트 튜토리얼
- 스프링 부트
- 알고리즘
- 스프링 부트 회원 가입
- leetcode binary search
- intellij
- 스프링 부트 애플리케이션
- proto3
- 도메인 설계
- leetcode
- spring boot jwt
- Java
- Linux
- Spring Boot
- 스프링부트
- leetcode stack
- 스프링 데이터 jpa
- leetcode bst
- Jackson
- JPA
- QueryDSL
- r