본문 바로가기
Spring

Server to Server의 연결 - header 값 지정하는 방법

by step 1 2021. 6. 26.
반응형

URI에 Header 데이터를 추가하는 방법

 // header값을 추가해 준다.
        RequestEntity<Req<UserRequest>> requestEntity = RequestEntity
                .post(uri)
                .contentType(MediaType.APPLICATION_JSON)
                .header("x-authorization", "abcd")
                .header("custom-header", "fffff")
                .body(req);

 

Header 값을 재활용하여 사용하는 방법

header는 고정이고 body 부분은 변경될 경우

 

예시 json 형태

{
  "header":{
    "responseCode": ""
  },
  "body":{
    "name": "spring boot",
    "age": 130
  }
}

Dto 생성 -> body부분은 제너릭으로 받아야 한다.

package com.example.client.dto;

public class Req<T> {

    private Header header;

    private T resBody;

    public  static class Header {
        private String responseCode;

        public String getResponseCode() {
            return responseCode;
        }

        public void setResponseCode(String responseCode) {
            this.responseCode = responseCode;
        }

        @Override
        public String toString() {
            return "Header{" +
                    "responseCode='" + responseCode + '\'' +
                    '}';
        }
    }

    public Header getHeader() {
        return header;
    }

    public void setHeader(Header header) {
        this.header = header;
    }

    public T getResBody() {
        return resBody;
    }

    public void setResBody(T resBody) {
        this.resBody = resBody;
    }

    @Override
    public String toString() {
        return "Req{" +
                "header=" + header +
                ", body=" + resBody +
                '}';
    }
}

 

Service에서 header 값을 넣어주는 코드

 Req<UserRequest> req = new Req<>();
        req.setHeader(
                new Req.Header()
        );
        req.setResBody(
                userRequest
        );

        // header값을 추가해 준다.
        RequestEntity<Req<UserRequest>> requestEntity = RequestEntity
                .post(uri)
                .contentType(MediaType.APPLICATION_JSON)
                .header("x-authorization", "abcd")
                .header("custom-header", "fffff")
                .body(req);

        RestTemplate restTemplate = new RestTemplate();
        // Req<UserResponse>.class 대신 사용
        /*new ParameterizedTypeReference<Req<UserResponse>>(){};*/
        ResponseEntity<Req<UserResponse>> response = restTemplate.exchange(requestEntity, new ParameterizedTypeReference<>(){});

 

Server에서 데이터 받는 방법

데이터가 제대로 들어왔는지 확인하기 위해서 HttpEntity<String>을 이용하여 데이터가 정상적으로 들어오는지 확인

 //@PostMapping("/user/{userId}/name/{userName}")
    public User post(@RequestBody User user,
                     @PathVariable int userId,
                     @PathVariable String userName,
                     @RequestHeader("x-authorization") String authorization,
                     @RequestHeader("custom-header") String customHeader){
        log.info("userId: {}, userName: {}",userId, userName );
        // header값 확인
        log.info("authorization: {}, customHeader: {}",authorization, customHeader );
        log.info("client req: {}", user);
        return user;
    }

    @PostMapping("/user/{userId}/name/{userName}")
    public Req<User> post2(//HttpEntity<String> entity,
                           @RequestBody Req<User> user,
                           @PathVariable int userId,
                           @PathVariable String userName,
                           @RequestHeader("x-authorization") String authorization,
                           @RequestHeader("custom-header") String customHeader){

       // log.info("req: {}", entity.getBody());
        log.info("userId: {}, userName: {}",userId, userName );
        // header값 확인
        log.info("authorization: {}, customHeader: {}",authorization, customHeader );
        log.info("client req: {}", user);

        Req<User> response = new Req<>();
        response.setHeader(
                new Req.Header()
        );
        response.setResBody(user.getResBody());
        return response;
    }

로그 화면

 

 

Server에도 Dto를 생성해주어야 한다. (lombok 이용)

package com.example.server.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.SplittableRandom;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Req<T> {

    private Header header;
    private T resBody;

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Header {
        private String responseCode;
    }
}

확인

 

반응형