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

Commit 8a58b45

Browse files
authored
Merge pull request #1 from codej99/feature/messagesource
SpringBoot2로 Rest api 만들기(7) – MessageSource를 이용한 Exception 처리
2 parents ffd8fe1 + ffd8e82 commit 8a58b45

File tree

7 files changed

+45
-39
lines changed

7 files changed

+45
-39
lines changed

‎src/main/java/com/rest/api/advice/ExceptionAdvice.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,22 @@ public class ExceptionAdvice {
2424
@ExceptionHandler(Exception.class)
2525
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
2626
protected CommonResult defaultException(HttpServletRequest request, Exception e) {
27+
// 예외 처리의 메시지를 MessageSource에서 가져오도록 수정
2728
return responseService.getFailResult(Integer.valueOf(getMessage("unKnown.code")), getMessage("unKnown.msg"));
2829
}
2930

3031
@ExceptionHandler(CUserNotFoundException.class)
3132
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
3233
protected CommonResult userNotFoundException(HttpServletRequest request, CUserNotFoundException e) {
34+
// 예외 처리의 메시지를 MessageSource에서 가져오도록 수정
3335
return responseService.getFailResult(Integer.valueOf(getMessage("userNotFound.code")), getMessage("userNotFound.msg"));
3436
}
3537

38+
// code정보에 해당하는 메시지를 조회합니다.
3639
private String getMessage(String code) {
3740
return getMessage(code, null);
3841
}
39-
42+
// code정보, 추가 argument로 현재 locale에 맞는 메시지를 조회합니다.
4043
private String getMessage(String code, Object[] args) {
4144
return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
4245
}

‎src/main/java/com/rest/api/config/MessageConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public LocaleResolver localeResolver() {
2828
}
2929

3030
@Bean // 지역설정을 변경하는 인터셉터. 요청시 파라미터에 lang 정보를 지정하면 언어가 변경됨.
31-
private LocaleChangeInterceptor localeChangeInterceptor() {
31+
public LocaleChangeInterceptor localeChangeInterceptor() {
3232
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
3333
lci.setParamName("lang");
3434
return lci;

‎src/main/java/com/rest/api/controller/v1/UserController.java

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,42 +30,45 @@ public ListResult<User> findAllUser() {
3030
}
3131

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

4040
@ApiOperation(value = "회원 입력", notes = "회원을 입력한다")
4141
@PostMapping(value = "/user")
42-
public SingleResult<User> save(@ApiParam(value = "회원이름", required = true) @RequestParam String name,
43-
@ApiParam(value = "회원이메일", required = true) @RequestParam String email) {
44-
User user = new User();
45-
user.setName(name);
46-
user.setEmail(email);
42+
public SingleResult<User> save(@ApiParam(value = "회원아이디", required = true) @RequestParam String uid,
43+
@ApiParam(value = "회원이름", required = true) @RequestParam String name) {
44+
User user = User.builder()
45+
.uid(uid)
46+
.name(name)
47+
.build();
4748
return responseService.getSingleResult(userJpaRepo.save(user));
4849
}
4950

5051
@ApiOperation(value = "회원 수정", notes = "회원정보를 수정한다")
5152
@PutMapping(value = "/user")
5253
public SingleResult<User> modify(
53-
@ApiParam(value = "회원ID", required = true) @RequestParam int userId,
54-
@ApiParam(value = "회원이름", required = true) @RequestParam String name,
55-
@ApiParam(value = "회원이메일", required = true) @RequestParam String email) {
56-
User user = new User();
57-
user.setId(userId);
58-
user.setName(name);
59-
user.setEmail(email);
54+
@ApiParam(value = "회원번호", required = true) @RequestParam long msrl,
55+
@ApiParam(value = "회원아이디", required = true) @RequestParam String uid,
56+
@ApiParam(value = "회원이름", required = true) @RequestParam String name) {
57+
User user = User.builder()
58+
.msrl(msrl)
59+
.uid(uid)
60+
.name(name)
61+
.build();
6062
return responseService.getSingleResult(userJpaRepo.save(user));
6163
}
6264

6365
@ApiOperation(value = "회원 삭제", notes = "userId로 회원정보를 삭제한다")
64-
@DeleteMapping(value = "/user/{userId}")
66+
@DeleteMapping(value = "/user/{msrl}")
6567
public CommonResult delete(
66-
@ApiParam(value = "회원ID", required = true) @PathVariable intuserId) {
67-
userJpaRepo.deleteById(userId);
68+
@ApiParam(value = "회원번호", required = true) @PathVariable longmsrl) {
69+
userJpaRepo.deleteById(msrl);
6870
// 성공 결과 정보만 필요한경우 getSuccessResult()를 이용하여 결과를 출력한다.
6971
return responseService.getSuccessResult();
7072
}
7173
}
74+
Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
package com.rest.api.entity;
22

3-
import lombok.Getter;
4-
import lombok.Setter;
3+
import lombok.*;
54

6-
import javax.persistence.Entity;
7-
import javax.persistence.GeneratedValue;
8-
import javax.persistence.GenerationType;
9-
import javax.persistence.Id;
5+
import javax.persistence.*;
106

11-
@Entity
12-
@Getter
13-
@Setter
14-
//@Table(name = "user")
7+
@Builder // builder를 사용할수 있게 합니다.
8+
@Entity // jpa entity임을 알립니다.
9+
@Getter // user 필드값의 getter를 자동으로 생성합니다.
10+
@NoArgsConstructor // 인자없는 생성자를 자동으로 생성합니다.
11+
@AllArgsConstructor // 인자를 모두 갖춘 생성자를 자동으로 생성합니다.
12+
@Table(name = "user") // 'user' 테이블과 매핑됨을 명시
1513
public class User {
16-
@Id // pk
14+
@Id // primaryKey임을 알립니다.
1715
@GeneratedValue(strategy = GenerationType.IDENTITY)
18-
private int id;
16+
// pk생성전략을 DB에 위임한다는 의미입니다. mysql로 보면 pk 필드를 auto_increment로 설정해 놓은 경우로 보면 됩니다.
17+
private long msrl;
18+
@Column(nullable = false, unique = true, length = 30) // uid column을 명시합니다. 필수이고 유니크한 필드이며 길이는 30입니다.
19+
private String uid;
20+
@Column(nullable = false, length = 100) // name column을 명시합니다. 필수이고 길이는 100입니다.
1921
private String name;
20-
private String email;
2122
}

‎src/main/java/com/rest/api/repo/UserJpaRepo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
import com.rest.api.entity.User;
44
import org.springframework.data.jpa.repository.JpaRepository;
55

6-
public interface UserJpaRepo extends JpaRepository<User, Integer> {
6+
public interface UserJpaRepo extends JpaRepository<User, Long> {
77
}

‎src/main/java/com/rest/api/service/ResponseService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ public class ResponseService {
1212

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

1817
int code;
1918
String msg;

‎src/main/resources/application.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ spring:
88
username: sa
99
jpa:
1010
database-platform: org.hibernate.dialect.H2Dialect
11-
#properties.hibernate.hbm2ddl.auto: none
11+
properties.hibernate.hbm2ddl.auto: update
1212
showSql: true
1313
messages:
1414
basename: i18n/exception

0 commit comments

Comments
(0)

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