RestTemplate restTemplate = new RestTemplate();
Object response = restTemplate.getForObject(uri, Object.class);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Object> response = restTemplate.getForObject(uri, Object.class);
System.out.println(response.getStatusCode()); // 200 ok
System.out.println(response.getHeaders());
System.out.println(response.getBody());
UserRequest req = new UserRequest();
req.setName("steve");
req.setAge(10);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<UserResponse> response = restTemplate.postForObject(uri, req, UserResponse.class);
System.out.println(response.getStatusCode()); // 200 ok
System.out.println(response.getHeaders());
System.out.println(response.getBody());
UserRequest req = new UserRequest();
req.setName("steve");
req.setAge(10);
RequestEntity<UserRequest> requestEntity = RequestEntity
.post(uri)
.contentType(MediaType.APPLICATON_JSON)
.header(“x-authorization”, “abcd”)
.header(“custom-header”, “ffff”)
.body(req);
RestTemplate restTemplate = new RestTemplate();
RestponseEntity<userResponse> response = restTemplate.exchange(requestEntity, UserResponse.class);
//response class
Public class Req<T> {
private String exampleString;
private T exampleObject;
}
//restTemplate
restTemplate.exchange(requestEntity, Req<someObject>.class);
-> 오류 발생 -> generic class에는 .class를 붙일 수 없다
restTemplate.exchange(requestEntity, new ParameterizedTypeReference<Req<someObject>>(){});
ResponseEntity<Req<someObject>> response = restTemplate.exchange(requestEntity, new ParameterizedTypeReference<>(){});
//responseEntity<>안에 타입을 지정해두어 ParameterizedTypeReference의 <>는 생략 가능
URI uri = new URI(str);
URI uri = URI.create(str);
// create(str) code
public static URI create(String str) {
try {
return new URI(str);
} catch (URISyntaxException x) {
throw new IllegalArgumentException(x.getMessage(), x);
}
}
생성되는 결과는 같지만 exception 처리를 해준다
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/api/server/hello")
.encode() // 인코딩 (default : UTF-8)
.build() // 인스턴스 빌드
.toUri();
// http://localhost:8080/api/server/hello
queryParam
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/api/server/hello")
.queryParam("id", "testId")
.queryParam("type", "0000")
.encode()
.build()
.toUri();
// http://localhost:8080/api/server/hello?id=testId&type=0000
http://localhost:8080/api/server/user/{userId}/name/{userName}
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/api/server/user/{userId}/name/{userName}")
.encode()
.build()
.expand(100, "steve")
.toUri();
// http://localhost:8080/api/server/user/100/name/steve
// 주의
.expand(100)
.expand("steve")
// -> 오류 발생 : 첫 번째 expand()만 인식된다
RestTemplate과 함께 사용시 주의사항
// RestTemplate + URI/String
String uri = UriComponentsBuilder...
String타입의 경우 RestTemplate에서 내부적으로 인코딩을 수행
-> 인코딩 중복 수행될 수 있다
-> RestTemplate과 함께 사용한다면 URI로 생성하거나 인코딩 되지 않은 String을 생성하여 사용
restTemplate.getForObject(uri, String.class)
-> restTemplate을 통해 response를 string으로 변환시 한글 깨짐 현상 발생
HttpMessageConverter : HTTP request / response를 변환
StringHttpMessageConverter : Http response를 String으로 변환
-> default Charset : ISO-8859-1
template.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
-> 한글 깨짐 현상 해결