diff --git a/build.gradle b/build.gradle index e7ba1ad..d06d6e9 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,6 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'io.springfox:springfox-swagger2:2.6.1' implementation 'io.springfox:springfox-swagger-ui:2.6.1' - implementation 'net.rakugakibox.util:yaml-resource-bundle:1.1' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' runtimeOnly 'mysql:mysql-connector-java' diff --git a/src/main/java/com/rest/api/advice/ExceptionAdvice.java b/src/main/java/com/rest/api/advice/ExceptionAdvice.java deleted file mode 100644 index 0ad8d7a..0000000 --- a/src/main/java/com/rest/api/advice/ExceptionAdvice.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.rest.api.advice; - -import com.rest.api.advice.exception.CUserNotFoundException; -import com.rest.api.model.response.CommonResult; -import com.rest.api.service.ResponseService; -import lombok.RequiredArgsConstructor; -import org.springframework.context.MessageSource; -import org.springframework.context.i18n.LocaleContextHolder; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -import javax.servlet.http.HttpServletRequest; - -@RequiredArgsConstructor -@RestControllerAdvice -public class ExceptionAdvice { - - private final ResponseService responseService; - - private final MessageSource messageSource; - - @ExceptionHandler(Exception.class) - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - protected CommonResult defaultException(HttpServletRequest request, Exception e) { - return responseService.getFailResult(Integer.valueOf(getMessage("unKnown.code")), getMessage("unKnown.msg")); - } - - @ExceptionHandler(CUserNotFoundException.class) - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - protected CommonResult userNotFoundException(HttpServletRequest request, CUserNotFoundException e) { - return responseService.getFailResult(Integer.valueOf(getMessage("userNotFound.code")), getMessage("userNotFound.msg")); - } - - private String getMessage(String code) { - return getMessage(code, null); - } - - private String getMessage(String code, Object[] args) { - return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); - } -} diff --git a/src/main/java/com/rest/api/advice/exception/CUserNotFoundException.java b/src/main/java/com/rest/api/advice/exception/CUserNotFoundException.java deleted file mode 100644 index c91e367..0000000 --- a/src/main/java/com/rest/api/advice/exception/CUserNotFoundException.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.rest.api.advice.exception; - -public class CUserNotFoundException extends RuntimeException { - public CUserNotFoundException(String msg, Throwable t) { - super(msg, t); - } - - public CUserNotFoundException(String msg) { - super(msg); - } - - public CUserNotFoundException() { - super(); - } -} diff --git a/src/main/java/com/rest/api/config/MessageConfiguration.java b/src/main/java/com/rest/api/config/MessageConfiguration.java deleted file mode 100644 index 4823af2..0000000 --- a/src/main/java/com/rest/api/config/MessageConfiguration.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.rest.api.config; - -import lombok.extern.slf4j.Slf4j; -import net.rakugakibox.util.YamlResourceBundle; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.MessageSource; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.ResourceBundleMessageSource; -import org.springframework.web.servlet.LocaleResolver; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; -import org.springframework.web.servlet.i18n.SessionLocaleResolver; - -import java.util.Locale; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -@Configuration -public class MessageConfiguration implements WebMvcConfigurer { - - @Bean // 세션에 지역설정. default는 KOREAN = 'ko' - public LocaleResolver localeResolver() { - SessionLocaleResolver slr = new SessionLocaleResolver(); - slr.setDefaultLocale(Locale.KOREAN); - return slr; - } - - @Bean // 지역설정을 변경하는 인터셉터. 요청시 파라미터에 lang 정보를 지정하면 언어가 변경됨. - private LocaleChangeInterceptor localeChangeInterceptor() { - LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); - lci.setParamName("lang"); - return lci; - } - - @Override // 인터셉터를 시스템 레지스트리에 등록 - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(localeChangeInterceptor()); - } - - @Bean // yml 파일을 참조하는 MessageSource 선언 - public MessageSource messageSource( - @Value("${spring.messages.basename}") String basename, - @Value("${spring.messages.encoding}") String encoding - ) { - YamlMessageSource ms = new YamlMessageSource(); - ms.setBasename(basename); - ms.setDefaultEncoding(encoding); - ms.setAlwaysUseMessageFormat(true); - ms.setUseCodeAsDefaultMessage(true); - ms.setFallbackToSystemLocale(true); - return ms; - } - - // locale 정보에 따라 다른 yml 파일을 읽도록 처리 - private static class YamlMessageSource extends ResourceBundleMessageSource { - @Override - protected ResourceBundle doGetBundle(String basename, Locale locale) throws MissingResourceException { - return ResourceBundle.getBundle(basename, locale, YamlResourceBundle.Control.INSTANCE); - } - } -} diff --git a/src/main/java/com/rest/api/controller/v1/UserController.java b/src/main/java/com/rest/api/controller/v1/UserController.java index df649b5..fcbe35d 100644 --- a/src/main/java/com/rest/api/controller/v1/UserController.java +++ b/src/main/java/com/rest/api/controller/v1/UserController.java @@ -1,18 +1,15 @@ package com.rest.api.controller.v1; -import com.rest.api.advice.exception.CUserNotFoundException; import com.rest.api.entity.User; -import com.rest.api.model.response.CommonResult; -import com.rest.api.model.response.ListResult; -import com.rest.api.model.response.SingleResult; import com.rest.api.repo.UserJpaRepo; -import com.rest.api.service.ResponseService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.util.List; + @Api(tags = {"1. User"}) @RequiredArgsConstructor @RestController @@ -20,52 +17,22 @@ import org.springframework.web.bind.annotation.*; public class UserController { private final UserJpaRepo userJpaRepo; - private final ResponseService responseService; // 결과를 처리할 Service - @ApiOperation(value = "회원 리스트 조회", notes = "모든 회원을 조회한다") - @GetMapping(value = "/users") - public ListResult findAllUser() { - // 결과데이터가 여러건인경우 getListResult를 이용해서 결과를 출력한다. - return responseService.getListResult(userJpaRepo.findAll()); + @ApiOperation(value = "회원 조회", notes = "모든 회원을 조회한다") + @GetMapping(value = "/user") + public List findAllUser() { + return userJpaRepo.findAll(); } - @ApiOperation(value = "회원 단건 조회", notes = "userId로 회원을 조회한다") - @GetMapping(value = "/user/{userId}") - public SingleResult findUserById(@ApiParam(value = "회원ID", required = true) @PathVariable int userId, - @ApiParam(value = "언어", defaultValue = "ko") @RequestParam String lang) { - // 결과데이터가 단일건인경우 getSingleResult를 이용해서 결과를 출력한다. - return responseService.getSingleResult(userJpaRepo.findById(userId).orElseThrow(CUserNotFoundException::new)); - } - - @ApiOperation(value = "회원 입력", notes = "회원을 입력한다") + @ApiOperation(value = "회원 입력", notes = "회원을 입력한다.") @PostMapping(value = "/user") - public SingleResult save(@ApiParam(value = "회원이름", required = true) @RequestParam String name, - @ApiParam(value = "회원이메일", required = true) @RequestParam String email) { - User user = new User(); - user.setName(name); - user.setEmail(email); - return responseService.getSingleResult(userJpaRepo.save(user)); - } - - @ApiOperation(value = "회원 수정", notes = "회원정보를 수정한다") - @PutMapping(value = "/user") - public SingleResult modify( - @ApiParam(value = "회원ID", required = true) @RequestParam int userId, - @ApiParam(value = "회원이름", required = true) @RequestParam String name, - @ApiParam(value = "회원이메일", required = true) @RequestParam String email) { - User user = new User(); - user.setId(userId); - user.setName(name); - user.setEmail(email); - return responseService.getSingleResult(userJpaRepo.save(user)); - } - - @ApiOperation(value = "회원 삭제", notes = "userId로 회원정보를 삭제한다") - @DeleteMapping(value = "/user/{userId}") - public CommonResult delete( - @ApiParam(value = "회원ID", required = true) @PathVariable int userId) { - userJpaRepo.deleteById(userId); - // 성공 결과 정보만 필요한경우 getSuccessResult()를 이용하여 결과를 출력한다. - return responseService.getSuccessResult(); + public User save(@ApiParam(value = "회원아이디", required = true) @RequestParam String uid, + @ApiParam(value = "회원이름", required = true) @RequestParam String name) { + User user = User.builder() + .uid(uid) + .name(name) + .build(); + return userJpaRepo.save(user); } } + diff --git a/src/main/java/com/rest/api/entity/User.java b/src/main/java/com/rest/api/entity/User.java index 6d31eb2..52628ce 100644 --- a/src/main/java/com/rest/api/entity/User.java +++ b/src/main/java/com/rest/api/entity/User.java @@ -8,14 +8,26 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; -@Entity -@Getter -@Setter -//@Table(name = "user") +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Builder // builder를 사용할수 있게 합니다. +@Entity // jpa entity임을 알립니다. +@Getter // user 필드값의 getter를 자동으로 생성합니다. +@NoArgsConstructor // 인자없는 생성자를 자동으로 생성합니다. +@AllArgsConstructor // 인자를 모두 갖춘 생성자를 자동으로 생성합니다. +@Table(name = "user") // 'user' 테이블과 매핑됨을 명시 public class User { - @Id // pk + @Id // primaryKey임을 알립니다. @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + // pk생성전략을 DB에 위임한다는 의미입니다. mysql로 보면 pk 필드를 auto_increment로 설정해 놓은 경우로 보면 됩니다. + private long msrl; + @Column(nullable = false, unique = true, length = 30) // uid column을 명시합니다. 필수이고 유니크한 필드이며 길이는 30입니다. + private String uid; + @Column(nullable = false, length = 100) // name column을 명시합니다. 필수이고 길이는 100입니다. private String name; - private String email; } diff --git a/src/main/java/com/rest/api/model/response/CommonResult.java b/src/main/java/com/rest/api/model/response/CommonResult.java deleted file mode 100644 index 6b2d9a5..0000000 --- a/src/main/java/com/rest/api/model/response/CommonResult.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.rest.api.model.response; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class CommonResult { - - @ApiModelProperty(value = "응답 성공여부 : true/false") - private boolean success; - - @ApiModelProperty(value = "응답 코드 번호 : > 0 정상, < 0 비정상") - private int code; - - @ApiModelProperty(value = "응답 메시지") - private String msg; -} - diff --git a/src/main/java/com/rest/api/model/response/ListResult.java b/src/main/java/com/rest/api/model/response/ListResult.java deleted file mode 100644 index 331036d..0000000 --- a/src/main/java/com/rest/api/model/response/ListResult.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.rest.api.model.response; - -import lombok.Getter; -import lombok.Setter; - -import java.util.List; - -@Getter -@Setter -public class ListResult extends CommonResult { - private List list; -} \ No newline at end of file diff --git a/src/main/java/com/rest/api/model/response/SingleResult.java b/src/main/java/com/rest/api/model/response/SingleResult.java deleted file mode 100644 index 901341e..0000000 --- a/src/main/java/com/rest/api/model/response/SingleResult.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.rest.api.model.response; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class SingleResult extends CommonResult { - private T data; -} \ No newline at end of file diff --git a/src/main/java/com/rest/api/service/ResponseService.java b/src/main/java/com/rest/api/service/ResponseService.java deleted file mode 100644 index b666b61..0000000 --- a/src/main/java/com/rest/api/service/ResponseService.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.rest.api.service; - -import com.rest.api.model.response.CommonResult; -import com.rest.api.model.response.ListResult; -import com.rest.api.model.response.SingleResult; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class ResponseService { - - // enum으로 api 요청 결과에 대한 code, message를 정의합니다. - public enum CommonResponse { - SUCCESS(0, "성공하였습니디."), - FAIL(-1, "실패하였습니다."); - - int code; - String msg; - - CommonResponse(int code, String msg) { - this.code = code; - this.msg = msg; - } - - public int getCode() { - return code; - } - - public String getMsg() { - return msg; - } - } - // 단일건 결과를 처리하는 메소드 - public SingleResult getSingleResult(T data) { - SingleResult result = new SingleResult<>(); - result.setData(data); - setSuccessResult(result); - return result; - } - // 다중건 결과를 처리하는 메소드 - public ListResult getListResult(List list) { - ListResult result = new ListResult<>(); - result.setList(list); - setSuccessResult(result); - return result; - } - // 성공 결과만 처리하는 메소드 - public CommonResult getSuccessResult() { - CommonResult result = new CommonResult(); - setSuccessResult(result); - return result; - } - // 실패 결과만 처리하는 메소드 - public CommonResult getFailResult(int code, String msg) { - CommonResult result = new CommonResult(); - result.setSuccess(false); - result.setCode(code); - result.setMsg(msg); - return result; - } - // 결과 모델에 api 요청 성공 데이터를 세팅해주는 메소드 - private void setSuccessResult(CommonResult result) { - result.setSuccess(true); - result.setCode(CommonResponse.SUCCESS.getCode()); - result.setMsg(CommonResponse.SUCCESS.getMsg()); - } -} diff --git a/src/main/resources/i18n/exception_en.yml b/src/main/resources/i18n/exception_en.yml deleted file mode 100644 index 0b3e28e..0000000 --- a/src/main/resources/i18n/exception_en.yml +++ /dev/null @@ -1,6 +0,0 @@ -unKnown: - code: "-9999" - msg: "An unknown error has occurred." -userNotFound: - code: "-1000" - msg: "This member not exist" \ No newline at end of file diff --git a/src/main/resources/i18n/exception_ko.yml b/src/main/resources/i18n/exception_ko.yml deleted file mode 100644 index dc51274..0000000 --- a/src/main/resources/i18n/exception_ko.yml +++ /dev/null @@ -1,6 +0,0 @@ -unKnown: - code: "-9999" - msg: "알수 없는 오류가 발생하였습니다." -userNotFound: - code: "-1000" - msg: "존재하지 않는 회원입니다." \ No newline at end of file