Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

SpringBoot2로 Rest api 만들기(7) – MessageSource를 이용한 Exception 처리 #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
codej99 merged 1 commit into master from feature/messagesource
Apr 16, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/main/java/com/rest/api/advice/ExceptionAdvice.java
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,22 @@ public class ExceptionAdvice {
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
protected CommonResult defaultException(HttpServletRequest request, Exception e) {
// 예외 처리의 메시지를 MessageSource에서 가져오도록 수정
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) {
// 예외 처리의 메시지를 MessageSource에서 가져오도록 수정
return responseService.getFailResult(Integer.valueOf(getMessage("userNotFound.code")), getMessage("userNotFound.msg"));
}

// code정보에 해당하는 메시지를 조회합니다.
private String getMessage(String code) {
return getMessage(code, null);
}

// code정보, 추가 argument로 현재 locale에 맞는 메시지를 조회합니다.
private String getMessage(String code, Object[] args) {
return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
}
Expand Down
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public LocaleResolver localeResolver() {
}

@Bean // 지역설정을 변경하는 인터셉터. 요청시 파라미터에 lang 정보를 지정하면 언어가 변경됨.
private LocaleChangeInterceptor localeChangeInterceptor() {
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
Expand Down
43 changes: 23 additions & 20 deletions src/main/java/com/rest/api/controller/v1/UserController.java
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -30,42 +30,45 @@ public ListResult<User> findAllUser() {
}

@ApiOperation(value = "회원 단건 조회", notes = "userId로 회원을 조회한다")
@GetMapping(value = "/user/{userId}")
public SingleResult<User> 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));
@GetMapping(value = "/user/{msrl}")
public SingleResult<User> findUserById(@ApiParam(value = "회원ID", required = true) @PathVariable long msrl,
@ApiParam(value = "언어", defaultValue = "ko") @RequestParam String lang) {
// 결과데이터가 단일건인경우 getBasicResult를 이용해서 결과를 출력한다.
return responseService.getSingleResult(userJpaRepo.findById(msrl).orElseThrow(CUserNotFoundException::new));
}

@ApiOperation(value = "회원 입력", notes = "회원을 입력한다")
@PostMapping(value = "/user")
public SingleResult<User> 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);
public SingleResult<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 responseService.getSingleResult(userJpaRepo.save(user));
}

@ApiOperation(value = "회원 수정", notes = "회원정보를 수정한다")
@PutMapping(value = "/user")
public SingleResult<User> 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);
@ApiParam(value = "회원번호", required = true) @RequestParam long msrl,
@ApiParam(value = "회원아이디", required = true) @RequestParam String uid,
@ApiParam(value = "회원이름", required = true) @RequestParam String name) {
User user = User.builder()
.msrl(msrl)
.uid(uid)
.name(name)
.build();
return responseService.getSingleResult(userJpaRepo.save(user));
}

@ApiOperation(value = "회원 삭제", notes = "userId로 회원정보를 삭제한다")
@DeleteMapping(value = "/user/{userId}")
@DeleteMapping(value = "/user/{msrl}")
public CommonResult delete(
@ApiParam(value = "회원ID", required = true) @PathVariable int userId) {
userJpaRepo.deleteById(userId);
@ApiParam(value = "회원번호", required = true) @PathVariable long msrl) {
userJpaRepo.deleteById(msrl);
// 성공 결과 정보만 필요한경우 getSuccessResult()를 이용하여 결과를 출력한다.
return responseService.getSuccessResult();
}
}

27 changes: 14 additions & 13 deletions src/main/java/com/rest/api/entity/User.java
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package com.rest.api.entity;

import lombok.Getter;
import lombok.Setter;
import lombok.*;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.*;

@Entity
@Getter
@Setter
//@Table(name = "user")
@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;
}
2 changes: 1 addition & 1 deletion src/main/java/com/rest/api/repo/UserJpaRepo.java
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
import com.rest.api.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserJpaRepo extends JpaRepository<User, Integer> {
public interface UserJpaRepo extends JpaRepository<User, Long> {
}
3 changes: 1 addition & 2 deletions src/main/java/com/rest/api/service/ResponseService.java
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ public class ResponseService {

// enum으로 api 요청 결과에 대한 code, message를 정의합니다.
public enum CommonResponse {
SUCCESS(0, "성공하였습니디."),
FAIL(-1, "실패하였습니다.");
SUCCESS(0, "성공하였습니디.");

int code;
String msg;
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/application.yml
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ spring:
username: sa
jpa:
database-platform: org.hibernate.dialect.H2Dialect
#properties.hibernate.hbm2ddl.auto: none
properties.hibernate.hbm2ddl.auto: update
showSql: true
messages:
basename: i18n/exception
Expand Down

AltStyle によって変換されたページ (->オリジナル) /