728x90
DTO 변경하기
UserResponse
//DTO는 취지에 맞게 data클래스로 만든다
data class UserResponse(
val id: Long,
val name: String,
val age: Int?,
) {
/*
constructor(user: User): this(
id = user.id!!,
name = user.name,
age = user.age
)
*/
companion object{
fun of(user: User): UserResponse{
return UserResponse(
id = user.id!!,
name = user.name,
age = user.age,
)
}
}
}
- JAVA 클래스/패키지에 마우스 우측 클릭 -> convert Java File to Kotlin File 클릭하여 변환
- DTO 같은 경우에는 취지에 맞게 data 클래스로 만드는 것이 좋다
- init을 사용해서 만드는 것보다 부생성자(constructor(user:User) 를 통해 만드는 것이 더 좋다.
- 이보다 더 좋은 방법은 동반 객체에서 of 메서드를 통해 생성하는 것이다.
- 나머지는 모두 같으므로 생략한다.
Controller 변경하기
BookController
@RestController
class BookController(
private val bookService: BookService,
) {
@PostMapping("/book")
fun saveBook(@RequestBody request: BookRequest) {
bookService.saveBook(request)
}
@PostMapping("/book/loan")
fun loanBook(@RequestBody request: BookLoanRequest) {
bookService.loanBook(request)
}
@PutMapping("/book/return")
fun returnBook(@RequestBody request: BookReturnRequest) {
bookService.returnBook(request)
}
}
UserController
@RestController
class UserController(
private val userService: UserService,
) {
@PostMapping("/user")
fun saveUser(@RequestBody request: UserCreateRequest) {
userService.saveUser(request)
}
@GetMapping("/user")
@PutMapping("/user")
fun updateUserName(@RequestBody request: UserUpdateRequest) = userService.updateUserName(request)
@DeleteMapping("/user")
fun deleteUser(@RequestParam name: String){ //?연산자를 붙이면 스프링이 required = false설정을 한다
userService.deleteUser(name)
}
}
- Controller 같은 경우 테스트 코드가 없어 실제 화면을 통해 확인할 수 있다(localhost:8080/v1/index.html)
- 코틀린에서는 함수를 만들 때 반드시 블록일 필요 없이 바로 값을 대입할 수도 있다.
- 널 허용 파라미터를 받게 되면 스프링이 알아서 required=false 속성을 적용시켜, null 값을 허용시켜 준다.
- jackson 라이브러리 같은 경우 JAVA에서는 잘 변환해 주었지만 kotlin 코드로는 잘 변환 못 시켜 주는 경우도 있기 때문에 build.gradle에서 의존성을 추가해 주어야 한다.
- implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.13.3'
Application을 실행시켜주는 Main문
@SpringBootApplication
class LibraryAppApplication
fun main(args: Array<String>) {
runApplication<LibraryAppApplication>(*args) //가변인자는 * 연산자를 통해 넣어야한다
}
- main문은 코틀린에서 클래스 안에 있을 필요 없다.
- 가변 인자는 코틀린에서 * 연산자를 통해 파라미터로 사용해야 한다.
728x90
'실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기' 카테고리의 다른 글
| Ch03. 요구사항 추가(type, 대출현황) - Enum Class 를 활용해 type 리펙토링 하기 (0) | 2022.11.05 |
|---|---|
| Ch03. 요구사항 추가(type, 대출현황) - Java 서버를 Kotlin 서버로 리팩토링하자 - 책의 분야 추가하기 (0) | 2022.11.05 |
| Ch02. Java 서버를 Kotlin 서버로 리팩토링하자 - 서비스 계층 Kotlin으로 변경하기 (0) | 2022.11.01 |
| Ch02. Java 서버를 Kotlin 서버로 리팩토링하자 - Repository를 Kotlin으로 변경하기 (0) | 2022.11.01 |
| Ch02. Java 서버를 Kotlin 서버로 리팩토링하자 - Kotlin과 JPA를 함께 사용할 때 주의할 점 (0) | 2022.11.01 |