본문 바로가기
생각 정리

[패스트캠퍼스] Java & SpringBoot로 시작하는 웹 프로그래밍 : 자바 인강_8주차 학습일지

by jaeyoungb 2022. 8. 4.

# Response ( 응답 )

get api 와 post api 같은 경우는 위와 같이 표현해줄 수 있다.

( 단순히 text 의 형태, 아니면 json 의 형태로 response 를 내린다. )

 

 

# PUT API 를 통한 Response

@PutMapping("/put")
public ResponseEntity<User> put(@RequestBody User user) {
    
    return ResponseEntity.status(HttpStatus.CREATED).body(user);
}

>> Response 에 대해서 customizing 이 필요하다고 생각되면, ResponseEntity<> 를 사용한다.

>> http status, body, header 등을 임의로 설정이 가능하다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

# @Controller ( HTML 파일을 return 하는 page controller )

@Controller
public class PageController {

    @RequestMapping("/main")
    public String main() {
        return "main.html";
    }

>> @Controller 를 통해서 page 를 return 하는 server 도 작성이 가능하다.

 

 

# @ResponseBody 를 활용한 응답 방법

@ResponseBody
@GetMapping("/user")
public User user() {

    var user = new User();
    user.setName("steve");
    user.setAddress("fastcampus");
    return user;
}

>> ResponseEntity 외에 이렇게 @ResponseBody 를 활용한 응답 방법도 존재한다.

>> 여기서의 var타입을 추론할 때 사용하는 것으로 타입을 명시해야하는 점에서 편리성을 제공해주는 것이다.

 

>> 보통은 이러한 방식처럼, page controller 에서 response body 를 내리는 것은 안하는 게 맞다. 그러나 혹시라도, 내려줘야 한다면 이러한 방식처럼 내려준다는 걸 알아두자.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

int 는 디폴트 값이 0 이고, wrapper type 인 Integer 는 디폴트 값이 null 이다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

# @JsonInclude(JsonInclude.Include.NON_NULL)

>> null 값은 빠지고 있는 값들만 내려주게 된다.

 

# @JsonInlcude(JsonInclude.Inlcude.NON_EMPTY)

>> 비어 있는 값은 빠지고 채워져 있는 값들만 내려주게 된다.

 

>> 보통은 이런 annotation 은 사용하지 않고 default 로 쓰긴 하지만, 특정 언어에서 null 에 대한 부분을 처리하기 어렵다던지 할 때, 이 annotation 을 사용해서 규정같은 걸 만들어줄 수 있다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

# Object Mapper

1. Controller 를 통해서 하는 역할을 Objcet Mapper 를 통해서도 가능하다.

 

2. object → json(text) : getter 메서드를 활용한다.

    json(text) → object : default 생성자가 있어야 한다.

 

3. Object Mapper 가 참조하는 class 에서는 그 class 에서 직접 만든 method 의 명에 'get' 이라는 단어는 빠져야 정상적으로Object Mapper 가 작동된다.

 

 

# RestTemplate

1. log 받을 땐 @Slf4j 을 사용한다.

2. 요청받을 때는 ResponseEntity, 요청할 때는 RequestEntity 을 사용한다.

 

 

# Lombok

@Data

@AllArgsConstructor

@NoArgsConstructor

이러한 Annotation 들이 사용된다.

 

※ Json의 형태가 재사용이 되는 구조를 가지고 있다면, generic을 사용하면 된다.

 

 

# 두 개의 server 간의 소통

@Server

UriComponentsBuilder 주소 생성

@Autowired

getForObject

getForEntity

 

※ 형태가 좋은 Json인가 구별하는 법은 google에 json validation이나 json validator를 검색해서 붙여 넣어보면 된다.