반응형
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;
}
}
확인
반응형
'Spring' 카테고리의 다른 글
스프링 부트 이클립스, 인텔리제이 툴로 실행하는 방법 (0) | 2022.04.25 |
---|---|
Server to Server의 연결 - Naver API 사용 (0) | 2021.06.26 |
Server to Server의 연결 - post (0) | 2021.06.26 |
Server to Server의 연결 - get (0) | 2021.06.26 |
Exception 처리 (0) | 2021.06.19 |