ResponseEntity, HTTP μν μ½λ
π ResponseEntityλ?
ResponseEntity
λ HTTP μλ΅μ μ μ΄ν μ μλλ‘ λμμ£Όλ ν΄λμ€μ΄λ€. μλ΅ body, μν μ½λ, ν€λλ₯Ό μ μ΄ν μ μλ€. HttpEntity
λ₯Ό μμλ°μ ꡬνλμλ€.
@ResponseBody
λ μλ΅μ bodyλ§ μ μ΄ν μ μλ€λ μ μμ μ°¨μ΄κ° μλ€.
π κ΅¬μ± μμ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public ResponseEntity(HttpStatusCode status) {
this(null, null, status);
}
public ResponseEntity(@Nullable T body, HttpStatusCode status) {
this(body, null, status);
}
public ResponseEntity(MultiValueMap<String, String> headers, HttpStatusCode status) {
this(null, headers, status);
}
public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatusCode status) {
this(body, headers, (Object) status);
}
public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, int rawStatus) {
this(body, headers, (Object) rawStatus);
}
private ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, Object status) {
super(body, headers);
Assert.notNull(status, "HttpStatusCode must not be null");
this.status = status;
}
ResponseEntity
λ μΈ κ°μ§ μμλ₯Ό ν¬ν¨νκ³ μλ€.
HttpStatus
λ β200 OKβ, β404 Not Foundβμ κ°μ HTTP μν μ½λ μ 보λ₯Ό λ΄κ³ μλ€.HttpHeaders
λ `Content-typeβκ³Ό κ°μ HTTP ν€λ μ 보λ₯Ό λ΄κ³ μλ€.HttpBody
λ μ€μ μλ΅ body λ°μ΄ν°λ₯Ό λ΄κ³ μλ€.
π HTTP μν μ½λ
μΌλ¨ μ΄λ€ μ’ λ₯μ HTTP μν μ½λκ° μ‘΄μ¬νλμ§ νμΈν΄λ³΄μ.
ν¬κ² 5κ°μ§ κ·Έλ£Ήμ΄ μ‘΄μ¬νλ€.
- 1xx: νΉμ μ 보λ₯Ό μ 곡ν λ μ¬μ©νλ€. μμ²μ λ°μμΌλ©° νλ‘μΈμ€λ₯Ό κ³μ μ§νν¨μ μλ―Ένλ€.
- 100 Continue: μλ²κ° μμ²μ 첫 λΆλΆμ λ°κ³ μμ§ μμ μ΄ λλμ§ μμμμ μλ―Ένλ©° λλ¨Έμ§ λΆλΆμ κ³μ 보λ΄λ μ’λ€λ κ²μ μλ―Ένλ€.
- 101 Switching Protocols: μμ²μ
Upgrade
ν€λμ λ°λΌ μλ²κ° νλ‘ν μ½μ λ³κ²½νκ³ μλ μνμ΄λ€. - 102 Processing: μλ²κ° μμ²μ μμ νκ³ , μ²λ¦¬ μ€μ΄μ§λ§ μλ΅μ λ³΄λΌ μ μλ μνμ΄λ€.
- 2xx: μμ²μ΄ μ±κ³΅μ μΌλ‘ μ²λ¦¬λμμμ μλ―Ένλ€.
- 200 OK: μμ²μ΄ μ±κ³΅μ μΌλ‘ μ²λ¦¬λ μνμ΄λ€.
- 201 Created: μμ²μ΄ μ±κ³΅νμ¬ μλ‘μ΄ λ¦¬μμ€κ° μμ±λ μνμ΄λ€.
- 202 Accepted: μμ²μ΄ μ μλμμΌλ μμ§ μ²λ¦¬λμ§ μμ μνμ΄λ€.
- 204 No Content: μμ²μ μ±κ³΅νμΌλ ν΄λΌμ΄μΈνΈμκ² λ³΄λΌ μλ΅ bodyκ° μμμ μλ―Ένλ€.
- 206 Partial Content: ν΄λΌμ΄μΈνΈκ°
Range
ν€λλ₯Ό ν΅ν΄ 리μμ€μ μΌλΆλ§ μμ²νμ λ ν΄λΉ μ½ν μΈ κ° μ±κ³΅μ μΌλ‘ μ μ‘λμμμ μλ―Ένλ€.
- 3xx: μμ²μ μλ£νκΈ° μν΄ λ¦¬λ€μ΄λ μ
ν΄μΌ ν¨μ μλ―Ένλ€.
- 301 Moved Permanently: μμ²ν 리μμ€μ URIκ° μꡬμ μΌλ‘ λ³κ²½λμμμ μλ―Ένλ€. μλ΅μ
Location
ν€λμ μλ‘μ΄ URIμ ν¬ν¨μν¨λ€. - 302 Found: μμ²ν 리μμ€κ° μΌμμ μΌλ‘ λ€λ₯Έ URIμ μλ μνμ΄λ€.
- 304 Not Modified: ν΄λΌμ΄μΈνΈλ μΊμλ νμΌμ λ²μ μ΄ λ³κ²½λμλμ§ νμΈνκΈ° μν΄ μλ²μ μ‘°κ±΄λΆ μμ²μ 보λ΄λλ°, ν΄λΉ λ²μ μ΄ λ³κ²½λμ§ μμμμ μλ―Ένλ€.
- 307 Temporary Redirect: 302μ μ μ¬νλ 리λ€μ΄λ νΈ μ κΈ°μ‘΄ μμ²μ HTTP λ©μλλ₯Ό λ³κ²½νμ§ μκ³ κ·Έλλ‘ μ¬μ©ν΄μΌ ν¨μ μλ―Ένλ€.
- 308 Permanent Redirect: 301κ³Ό μ μ¬νλ 리λ€μ΄λ νΈ μ κΈ°μ‘΄ μμ²μ HTTP λ©μλλ₯Ό λ³κ²½νμ§ μκ³ κ·Έλλ‘ μ¬μ©ν΄μΌ ν¨μ μλ―Ένλ€.
- 301 Moved Permanently: μμ²ν 리μμ€μ URIκ° μꡬμ μΌλ‘ λ³κ²½λμμμ μλ―Ένλ€. μλ΅μ
- 4xx: ν΄λΌμ΄μΈνΈμ μ€λ₯λ‘ μλ²κ° μμ²μ μ²λ¦¬ν μ μμμ μλ―Ένλ€.
- 400 Bad Request: μλͺ»λ λ¬Έλ²μΌλ‘ μΈν΄ μλ²κ° μμ²μ μ΄ν΄ν μ μμμ μλ―Ένλ€.
- 401 Unauthorized: μΈμ¦λμ§ μμ μ¬μ©μμ μμ²μμ μλ―Ένλ€.
- 403 Forbidden: μλ²κ° μμ²μ μμ νμΌλ ν΄λΉ 리μμ€μ μ κ·Όν κΆνμ΄ μμμ λνλΈλ€.
- 404 Not Found: μμ²ν 리μμ€λ₯Ό μ°Ύμ μ μμμ μλ―Ένλ€.
- 405 Method Not Allowed: μμ²ν URIλ μ‘΄μ¬νλ ν΄λΉ URIμμ νμ©λμ§ μλ HTTP λ©μλλ₯Ό μ¬μ©ν κ²½μ°μ΄λ€.
- 409 Conflict: μμ²μ΄ μλ²μ νμ¬ μνμ μΆ©λνμ¬ μλ£λ μ μμμ μλ―Ένλ€.
- 415 Unsupported Media Type: μμ²μ
Content-Type
μ μ§μνμ§ μμμ μλ―Ένλ€. - 429 Too Many Requests: νΉμ μκ° λμ λ무 λ§μ μμ²μ΄ λ³΄λΈ μνμ΄λ€.
- 5xx: μλ² μΈ‘ μ€λ₯λ‘ μμ²μ μ²λ¦¬ν μ μμμ μλ―Ένλ€.
- 500 Internal Server Error: μλ²μ μ¬μμΉ λͺ»ν λ¬Έμ κ° λ°μν μνμ΄λ€.
- 502 Bad Gateway: κ°μ΄νΈμ¨μ΄ λλ νλ‘μ μλ²κ° μ€μ μμ²μ μ²λ¦¬νλ μλ²λ‘λΆν° μλͺ»λ μλ΅μ λ°μμμ μλ―Ένλ€.
- 503 Service Unavailable: μλ²κ° κ³ΌλΆν λλ μ μ§λ³΄μ λ±μΌλ‘ μΈν΄ μμ²μ μ²λ¦¬ν μ μμμ μλ―Ένλ€.
- 504 Gatewat Timeout: κ²μ΄νΈμ¨μ΄ λλ νλ‘μ μλ²κ° μ€μ μμ²μ μ²λ¦¬νλ μλ²λ‘λΆν° μκ° λ΄ μλ΅μ λ°μ§ λͺ»νμμ μλ―Ένλ€.
π μμ± λ°©λ²
1
2
3
4
5
6
7
8
9
10
11
// μμ±μλ₯Ό μ¬μ©νλ λ°©λ²
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "value");
return new ResponseEntity<>(user, headers, HttpStatus.OK);
// λΉλ ν¨ν΄μ μ¬μ©νλ λ°©λ²
return ResponseEntity
.status(HttpStatus.CREATED)
.header("Location", "/users/123")
.body(createdUser);
μμ±μμ λΉλ ν¨ν΄ λ κ°μ§ λ°©λ²μ΄ μ‘΄μ¬νλλ°, λ³΄ν΅ λΉλ ν¨ν΄μ λ§μ΄ μ¬μ©νλ€.
π μ₯μ
ResponseEntity
λ₯Ό μ¬μ©νλ©΄ μμ² μ²λ¦¬ κ²°κ³Όμ λ°λΌ μ μ ν μν μ½λλ₯Ό μ€μ ν μ μλ€. λν μλΉμ€ κ³μΈ΅μμ λ°μν μμΈμ λ°λΌ 컨νΈλ‘€λ¬ κ³μΈ΅μμ ꡬ체μ μΈ μλ¬ μλ΅μ μμ±ν μ μλ€.