Response ๋ฐ์ดํฐ ์ ์ด๋ฅผ ์ํ Filtering
ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋๋ ์ ๋ณด์ ๊ฐ์ ์ ์ด
๋ณดํต 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ์ค๋์ ์ด ์ค 3๋ฒ์งธ์ ๋ํด ๋ค๋ฃฌ๋ค.
- ๊ฐ์ ์ํธํํ๊ฑฐ๋ ์นํํ์ฌ ์ ๋ฌ
- null๋ก ๋ฐํ
- ์์ ์ ์ธํ๊ณ ๋ฐํ
@JsonIgnore
Response ๋ฐํ ์ Json๊ฐ์ ํฌํจ๋์ง ์๋๋ก ํ๋ annotation. ๊ฐ๋ณ์ ์ผ๋ก ํ๋ ๊ฐ์ ์ ์ดํ๋ค.
@JsonIgnore // ๋ฐํ ์ Json๊ฐ์ ํฌํจ๋์ง ์์ ->๋ฐํ๊ฐ ์ ์ด
privateString password;
@JsonIgnore
privateString ssn;
@JsonIgnoreProperties
ํด๋น ํด๋์ค ๋ธ๋ก ๋จ์๋ก ํํฐ๋ง
@JsonIgnoreProperties(value={"password", "ssn"})
public class User {
private Integer id;
@Size(min=2, message = "Name์ 2๊ธ์ ์ด์ ์
๋ ฅํด์ฃผ์ธ์.")
private String name;
@Past private Date joinDate;
private String password;
private String ssn;
}
@JsonFilter
controller๋ service ํด๋์ค์์ ์ฌ์ฉ๋๋ annotation. ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋น ํด๋์ค์ ์๋ ๋ชจ๋ ํ๋์ ํํฐ๋ง์ ๊ฑธ๊ณ , ํด๋์ค ์ฌ์ฉ ์ ํํฐ๋ง์ ์ ์ธํ ํน์ ํ๋๋ฅผ ์ ํํด์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋ค.
// domain
@JsonFilter("UserInfo") // ๋ถ์ฌ๋ ํํฐ๊ฐ์ controller๋ service ํด๋์ค์์ ์ฌ์ฉ๋๋ค
public class User { ... }
- setFilters๋ setSerialView๋ฅผ ์ฌ์ฉ ์์๋ ๊ผญ MappingJacksonValue ํ์ ์ผ๋ก ๊ฐ์ธ์ ๋ฐํํด์ผ ํ๋ค.
- SimpleBeanPropertyFilter : ํฌํจ์ํค๊ณ ์ถ์ ํํฐ๊ฐ ์ ์ธ
- FilterProvider : domain์์ ์ง์ ํ ํํฐ ์ง์
- MappingJacksonValue์ FilterProvider๋ฅผ ์ ์ฉํ์ฌ ๋ฆฌํด
@GetMapping("/users/{id}")
// setFilters๋ setSerialView๋ฅผ ์ฌ์ฉ ์ ๊ผญ MappingJacksonValue ํ์
์ผ๋ก ๊ฐ์ธ์ ๋ฐํ
public MappingJacksonValue retrieveUser(@PathVariable int id) {
User user = service.findOne(id);
if (user == null){
throw new UserNotFoundException(String.format("ID[%s] is not found", id));
}
// bean์ property๋ฅผ ์ ์ด
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter
.filterOutAllExcept("id", "name", "joinDate", "ssn");
// User์ @JsonFilter("UserInfo") ์ง์
FilterProvider filters = new SimpleFilterProvider().addFilter("UserInfo", filter);
MappingJacksonValue mapping = new MappingJacksonValue(user); // ์ ์ ๋ฐ์ดํฐ ์ ๋ฌ
mapping.setFilters(filters); // ํํฐ ์ ์ฉ
return mapping;
}
์ ๋ฆฌ
ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋๋ ์ ๋ณด์ ๊ฐ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ
(1) ๊ฐ์ ์ํธํํ๊ฑฐ๋ ์นํํ์ฌ ์ ๋ฌ
(2) null์ ๋ฃ์ด ์ ๋ฌ
(3) ํน์ ํ๋ ํํฐ๋ง -> @JsonIgnore, @JsonIgnoreProperties๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ ์ดํ๋ค
- @JsonIgnore : ๋จ์ ํ๋ ๊ฐ์ ์ ์ดํ ๋ ์ฌ์ฉ. ๋ฐํ ์ json ๊ฐ์ ํฌํจ๋์ง ์๋๋ค
- @JsonIgnoreProperties(value={"ํ๋๊ฐ"}) : ํด๋์ค๋ฅผ ๋ธ๋ก ๋จ์๋ก ํํฐ๋ง -> ์กฐ๊ธ ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ :@JsonFilter ์ฌ์ฉ
- domain์ @JsonFilter("ํํฐ๋ช ") ์ฌ์ฉ : ๋ถ์ฌ๋ ํํฐ๊ฐ์ controller๋ service ํด๋์ค์์ ์ฌ์ฉ
- controller์์ return๊ฐ์ MappingJacksonValue๋ก ์ ์ธ
- SimpleBeanPropertyFilter๋ฅผ ์ด์ฉํ์ฌ ํฌํจ์ํค๊ณ ์ถ์ ํํฐ๊ฐ ์ ์ธ
- FilterProvider์ domain์์ ์ง์ ํ ํํฐ ์ง์
- MappingJacksonValue์ FilterProvider๋ฅผ ์ ์ฉํ์ฌ ๋ฆฌํด
'๐ฟ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot/RESTful] REST API 3๋จ๊ณ๋ฅผ ์ํ HATEOAS ์ค์ (0) | 2022.02.18 |
---|---|
[Spring boot/RESTful] REST API ๋ฒ์ ๊ด๋ฆฌ (0) | 2022.02.18 |
[Spring Boot/RESTful] Response ๋ฐ์ดํฐ ํ์ ๋ฐํ(XML format) (0) | 2022.02.18 |
[Spring Boot/RESTful] Validation API์ Internationalization (0) | 2022.02.18 |
[Spring Boot/RESTful] User Service API ๊ตฌํ (0) | 2022.02.17 |
๋๊ธ