JSON 규칙
{
"name" : "유관순",
"birthday": "1902-12-16",
"edu" : [
{
"title" : "이화학당보통과",
"year" : 1916
},
{
"title" : "이화학당고등과",
"year" : 1919
}
]
}
응답 : @RestController
- @Controller
- @ResponseBody
JSON 형태 변경
1. 제외 예외처리 @JsonIgnore
- Response를 정해서 반환해주는데, 이걸 굳이 사용하는 경우가 있을까?
public class Member {
private id;
private email;
@JsonIgnore
private String password;
}
2. 날짜 형식 변환 처리1 @JsonFormat
{
"registerDateTime" : 1519870069000 // LocalDataTime 타입
}
public class Member {
@JsonFormat(shape = Shape.STRING) // ISO-8601 형식
private LocalDateTime registerDataTime1;
@JsonFormat(pattern = "yyyyMMddHHmmss") // pattern
private LocalDateTime registerDataTime2;
}
{
"registerDateTime1" : "2018-03-01T11:07:49" // LocalDataTime 타입
"registerDateTime2" : "20180301020749"
}
3. 날짜 형식 변환 처리2 : 기본 적용 설정
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
.simpleDateFormat("yyyyMMddHHmmss") // Date 변환 패턴
.build();
converters.add(0, new MappingJackson2HttpMessageConverter(objectMapper));
}
}
응답데이터 @RequestBody
- 생략할 수 있다.
- @Valid 로 요청 객체를 검증
응답코드 지정하기 @HttpServletResponse
@GetMapping("/api/members/{id}")
public Member member(@PathVariable Long id, HttpServletResponse response) throws IOException {
Member member = memberService.selectById(id);
if (member == null) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return null;
}
return member;
}
- 이 방법보다 ResponseEntity를 사용하자
ResponseEntity를 이용한 응답 데이터 처리
public class ErrorResponse {
private String message;
public ErrorResponse(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
@GetMapping("/api/members/{id}")
public ResponseEntity<Object> member(@PathVariable Long id) {
Member member = memberService.selectById(id);
if (member == null) {
return ResponseEntity.status(HttpStatus.NOT_COUND)
.body(new ErrorResponse("no member"));
}
return ResponseEntity.status(HttpStatus.OK);
}
댓글