model > enumclass > UserStatus 에 enum의 값을 정의

@Getter
@AllArgsConstructor
public enum UserStatus {
REGISTERED(0,"등록","사용자 등록상태"),
UNREGISTERED(1,"해지","사용자 해지상태");
private Integer id;
private String title;
private String description;
}
private String status
------ >
@Enumerated(EnumType.STRING)
private UserStatus status;
status의 type을 enum으로 변경해준다.
private UserStatus status;
Request와 Response의 data type도 맞추어서 바꾸어준다.

만약 status의 값에 enum에 정의하지 않은 값을 넘기면 아래와 같은 오류가 난다. 대충 registered 와 unregistered의 값이 아니라는 뜻.
JSON parse error: Cannot deserialize value of type `com.example.spring_study0726.model.enumclass.UserStatus` from String "aa": not one of the values accepted for Enum class: [REGISTERED, UNREGISTERED]; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `com.example.spring_study0726.model.enumclass.UserStatus` from String "aa": not one of the values accepted for Enum class: [REGISTERED, UNREGISTERED]
String enumString = UserStatus.REGISTERED.getTitle();
모든 Controller에 대해서 CRUD를 선언하는 것은 코드의 반복성을 높인다. --> 추상화를 통해서 반복을 줄인다.
public abstract class CrudController<Req,Res> implements CrudInterface<Req,Res> {
protected CrudInterface<Req,Res> baseService;
@Override
@PostMapping("")
public Header<Res> create(@RequestBody Header<Req> request) {
return baseService.create(request);
}
@Override
@GetMapping("{id}")
public Header<Res> read(@PathVariable Long id) {
return baseService.read(id);
}
@Override
@PutMapping("")
public Header<Res> update(@RequestBody Header<Req> request) {
return baseService.update(request);
}
@Override
@DeleteMapping("{id}")
public Header delete(@PathVariable Long id) {
return baseService.delete(id);
}
}
abstract class를 선언하고 crud ifs를 상속받는다. crud를 implements 하고, service를 upcasting하기 위해 ifs로 선언한다.
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController extends CrudController<UserApiRequest,UserApiResponse> {
@Autowired
UserApiLogicService userApiLogicService;
@PostConstruct
public void init(){
this.baseService=userApiLogicService;
}
}
코드의 길이가 확 줄었다.
@PostConstruct는 초기 생성자처럼 작동하게끔 만들어주는 annotation