Spring Boot
-
spring restcontrollerSpring Boot 2021. 11. 13. 00:34
@PostMapping("/api/user") public String createUser(@RequestBody UserRequestDto requestDto) { return userService.create(requestDto); } 이 메소드의 리턴값은 String이고 RestController 안에서 정의되었다. ajax로 POST를 한 이후 값을 이용하기 위해 .done(function(result) {...})를 사용해 봤지만 전혀 작동이 되지 않았다. 이유는 String으로 보내진 값이 문자열로 인식이 안되고 오류 메시지처럼 인식이 되었기 때문이다. 그리하여 .fail(function(error) { alert(error); }) 를 넣어 실행해 보면 [object object]가 나온다...
-
spring boot 배포하기Spring Boot 2021. 11. 10. 15:58
gradle을 이용하면 bootjar를 실행하여 jar 파일을 만들 수 있다. 처음에는 배포를 heroku를 이용하여 했다. 예전에 heroku에 gradle을 배포하였다가 안됐었는데, 이번에는 jar 파일을 직접 배포하는 방식을 사용했다. 그러면서 저번에 gradle로 배포하지 못했던 이유를 알았는데, Procfile이 반드시 필요한 것이었음에도 불구하고 저번에는 작성하지 않았다. 그러므로 배포가 안되었던 것이다. h2 데이터베이스를 이용하여 배포했는데, heroku는 30분이 지나면 휴면 상태로 돌아가 메모리가 초기화되어 작성했던 데이터들이 날아갔다. 그래서 mariadb를 사용하려 했으나 무료로라도 addon을 사용하려면 카드를 등록해야 했다. 그래서 mariadb의 url에 주목했다. 공유기를 사..
-
스프링 부트 command 객체Spring Boot 2021. 9. 14. 22:04
제목 내용 작성자 이전에는 thymeleaf를 통해 뷰에서 컨트롤러로 객체를 전달하려 했다. 그런데 이렇게 하려면 boardRegister() GET 메소드의 매개변수로 BoardDto가 있어야 했다. 왜냐하면 객체가 전달되어 있어야 th:object="${boardDto}"를 수행할 수 있기 때문이다. 그래서 GET 메소드와 POST 메소드 둘 다에 매개변수가 있어야 했는데 이해하기 어려웠고 로직이 맞지 않는 것 같았다. 왜냐하면 뷰에서 컨트롤러로 전달할 때에는 Command 객체를 사용하고, 컨트롤러에서 뷰로 전달할 때에는 Model을 사용하는 걸로 알고 있었기 때문이다. 그러나 책을 천천히 읽으면서 이해할 수 있었다. 제목 내용 작성자 Command 객체는 각 엘리먼트의 name과 똑같은 set##..
-
스프링 부트 thymeleaf id 뷰에서 컨트롤러로 받아오기Spring Boot 2021. 9. 14. 21:38
@GetMapping("/boardDelete") public String deleteBoard(@RequestParam("id") Long id) { repository.deleteById(id); return "redirect:/board"; } 컨트롤러 삭제 뷰(일부) 처음에는 뷰의 2번째 줄에 id="id"를 추가하여 컨트롤러의 @RequestParam("id")와 연결시키려 했었다. 하지만 오류 페이지를 보니 인식할 수 없었다. 해결 방법은 하이퍼링크에 ${board.id}를 전달하는 것이다. thymeleaf는 컨트롤러에서 뷰로 객체를 보낼 때에 주로 사용하고 뷰에서 컨트롤러로 보낼 때에는 스프링에서 제공하는 command 객체를 잘 활용하는 게 더 효율적일 것 같다. 참고 https://ww..
-
스프링 부트 controller 오류 해결Spring Boot 2021. 9. 14. 10:40
@GetMapping("/boardRegister") public String getBoardRegister() { return "boardRegister"; } @PostMapping("/boardRegister") public String registerBoard(@ModelAttribute("boardDto") BoardDto boardDto) { repository.save(boardDto.toEntity()); return "redirect:board"; } 이를 실행하면 Caused by: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'boardDto' available a..
-
스프링 부트 웹 계층 구조Spring Boot 2021. 9. 9. 23:11
Web Layer: 컨트롤러, 뷰, 예외 처리, 어드바이스 등 Service Layer: @Service 가 사용됨 @Transactional 이 사용되는 영역 Repository Layer: 데이터베이스에 접근 인터페이스로 구현 Dtos: Layer 간에 데이터를 교환 Domain Model 비즈니스 처리 @Entity VO 참고 http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788965402602
-
스프링 부트 HTTP 동작 테스트Spring Boot 2021. 9. 9. 21:31
ToyController package com.example.toy1.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ToyController { @GetMapping("/toy") public String getHello() { return "hello toy"; } } ToyControllerTest package com.example.toy1.controller; import org.junit.jupiter.api.Test; import org.springfr..