1.GetMapping
2.통신하고 실제 구현되는 Controller
| ㅡ src/main/java
│ ├─ controller
│ ├─ api
│ ├ UserApiController.java
│ ├ UserController.java
│ ├─ dto
│ ├ ResponseDto.java
│ ├ UserDto.java
│ ├─ handler
│ ├─ model
│ ├ User.java
│ ├─ repository
│ ├ UserRepository.java
│ ├─ service
│ ├ UserService.java
@Controller
public class UserController {
@GetMapping("/user/joinForm")
public String joinForm() {
return "/user/join";
}
}
UserDto를 생성했던걸 User user 대신 Dto로 넣어줌
@RestController
public class UserApiController {
//응답 Dto insert로, json타입으로 @RequestBody로 객체넣어주고,user는 강제로 넣어주고,
//int타입으로 변수만들어서 서비스부분에 회원가입메서드안에 user파라미터 넣어주고,
//실행이 잘되면dto결과값 보내준다. service단에 설정한
//try, catch문으로 예외처리로 ! 성공처리가 되서 콘솔창에
@PostMapping("api/user")
public ResponseDto<Integer> save(@RequestBody UserDto userDto){
//System.out.println("@@@@@ UserApiController");
return new ResponseDto<Integer>(HttpStatus.OK.value(), 1);
}
}
controller에 return 되면 응답하기 위한 dto
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
//응답할 때 사용
public class ResponseDto<T> {
int status;
T data;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity //user클래스가 자동으로 mysql 테이블 생성
public class User {
@Id //primary key
@GeneratedValue(strategy=GenerationType.IDENTITY) //넘버링
private int id; //오라클은 시퀀스,mysql은 auto-increment
//유저네임이 null값이 되면 안되기때문에
@Column(nullable= false, length=30)
private String username;
@Column(nullable= false, length=200) //비밀번호 암호화(해쉬)
private String password;
@Column(nullable= false, length=200)
private String email;
//@ColumnDefault("'user'")
@Enumerated(EnumType.STRING)
private RoleType role; //Enum을 쓰는게 좋다.
//어떤회원가입을했을때 ADMIN, USER, manager 권한주기(도메인설정 , 도메인은 범위를 얘기하는거 , 성별은 남,여. 고등학교 1~3학년 이런식)
@CreationTimestamp //시간이 자동 입력
private Timestamp createDate;
}
//데이터에 도메인을 만들때, 도메인은 범위를 정할 때
public enum RoleType {
USER,ADMIN
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserDto {
private int id; // 오라클은 시퀀스,mysql은 auto-increment
private String username;
private String password;
private String email;
@Enumerated(EnumType.STRING)
private RoleType role; // Enum을 쓰는게 좋다.
private Timestamp createDate;
//@Builder
public UserDto(int id, String username, String password, String email,RoleType role, Timestamp createDate) {
this.id=id;
this.username=username;
this.password=password;
this.email=email;
this.role= role;
this.createDate=createDate;
}
//toEntity()메서드를 통해 Service > Database(Entity)로 Data를 전달할 때 Dto를 통해서 전달
public User toEntity() {
User user = User.builder()
.id(id)
.username(username)
.password(password)
.email(email)
.createDate(createDate)
.role(role)
.build();
return user;
}
}