티스토리 뷰
2024.04.23 _ ConflictingBeanDefinitionException 에러 , Spring02 (게시판 + 페이징 처리) ,Spring03 (댓글 기능 + REST API + Postman)
Ji@n 2024. 4. 23. 18:37
프로젝트를 새로 생성하고
컨트롤러를 옮긴 경우(복붙) -> 컨트롤러가 2개라고 생각함 -> 서버 clean , 서버 재시작을 습관화 하기
=> 서버 인식문제는 다 해결 된다
Spring02 (게시판 + 페이징 처리)
페이징 처리 순서는
1.DB 만들고
2.VO 만들고
3. mapper.xml 만들고
4. boardMapper 만들고
5. Test(JUnit 사용) 를 꼭 해봐야 안정적이다
boardMapperTest 할 때는 test 의 메소드들 주석처리하고 테스트할것만 하는게 좋음
boardService -> BoardController ->list.jsp(href)
@Autowired
private BoardMapper boardMapper;
@Test
public void test() {
// testBoardInsert();
// testBoardList();
// testBoardByBoardId();
// testBoardUpdate();
// testBoardDelete();
testBoardListPagination();
}
"modify" 페이지에 "boardId"라는 파라미터를 전달한다
${boardVO.boardId}는
JavaScript의 템플릿 문자열을 사용하여 동적으로 해당 게시판의 ID 값을 가져온다.
그래서 클릭된 버튼이 속한 게시판의 ID가 "modify" 페이지에 전달된다
boardService.getBoardById(boardId)를 호출하여
boardId에 해당하는 게시글을 가져온 후,
이를 Model 객체에 "boardVO"라는 이름으로 추가한다.
그러면 View(jsp)에서는 "boardVO"라는 이름으로 해당 게시글에 접근할 수 있다
detail.jsp에서 boardId를 전송받는다 = POST 방식
POST 방식이니깐 form 으로 보내야한다.
삭제 버튼을 누르면
'삭제하시겠습니까?' alert 메세지가 뜨고
form 데이터를 전송한다.
Controller 에서는 @Controller or @Component 를 반드시 해주기!
서브 쿼리 (쿼리 안에 쿼리)
전체를 가져옴
내림차순 정렬을 해서
start 부터 end까지 자르기
start와 end는 Pagination을 보면 나옴
선택된 페이지의 시작 글 일련번호(rn) - #{start} 는 getter
선택된 페이지의 마지막 글 일련번호(rn) - #{end}
페이징 처리 전체 게시글 수
전체 게시글 수는 DB에서 가져와야한다!
select 로 자바에 가져오면 int,string,vo 등 여러 형태가 있는데
vo 형태면 resultType으로 매칭해야한다(?)
count 는 숫자가 나오므로 맞춰줘야하는데
기본 타입 int 말고 참조타입 Integer를 넣는다!
list에서
PageMaker pageMaker = new PageMaker();
pageMaker.setPagination(pagination);
pageMaker.setTotalCount(boardService.getTotalCount());
model.addAttribute("pageMaker",pageMaker);
추가하기
* persistence 패키지랑 자바 src/main/resources의 mapper.xml 경로랑 같아야한다! 안그럼 에러남
아래 사진 참고!!
Spring03 (댓글 기능 + REST API + Postman)
REST API :
설계 방식 이다.
비동기방식으로 정보를 주고받기 위한 인터페이스.
기본적으로 *비동기 방식이다.
spring 댓글 기능에 RESTAPI를 쓰는 이유는 특정 게시글 페이지에서 기능이 수행되기 때문에, 비동기 방식을 쓴다. (ex :게시글 조회와 동시에 수행)
또한 url만 보고도 인식하도록 만들어놓은 방식이 REST API이다
데이터를 송수신 할 때는 JSON을 주로 쓴다, 물론 XML을 쓰는 경우도 있다.
REST API를 사용할 때는 서버에서 제공하는 데이터를 클라이언트에서 비동기 방식으로 가져와서
HTML로 화면을 구현하는 것이 일반적 (Web은 비동기로 만들려면 javascript 써야함)
특징 :
- 표준 HTTP 메서드 사용 : REST API는 표준 HTTP 메서드를 사용하여 리소스에 대해 다양한 작업을 수행
- 데이터 송수신 : JSON 또는 XML과 같은 다양한 형태의 리소스를 전송할 수 있음.
- 데이터는 클라이언트에서 비동기 방식으로 화면에 출력
GET: 리소스를 조회
POST: 리소스를 생성
PUT: 리소스를 수정
DELETE: 리소스를 제거
JSON 데이터 구조 예시 )
{ "이름" : "test",
"나이" : 30,
"성별" : 남성,
"주소" : {
"도시" : "서울",
"우편번호" : "123-456"
},
"관심사" : ["영화","독서","피아노"]
}
Spring REST API 어노테이션
@RequestBody : HTTP 요청으로 전송된 JSON 데이터를 Java 객체로 변환해주는 스프링 어노테이션
주로 REST API에서 클라이언트가 서버에 보낸 데이터를 수신하고 처리하는데 사용
@ResponseBody : Java 객체를 JSON 데이터로 변환해주는 스프링 어노테이션
주로 REST API에서 서버가 클라이언트에 JSON 데이터를 수신할 때 사용
@RestController : 해당 클래스가 JSON 데이터로 메서드 값을 리턴하도록 지정하는 스프링 어노테이션 *@ResponseBody를 사용하지 않아도 메소드가 자동으로 JSON 데이터 반환 *
=> 이말은 ResponseBody와 함께 사용할 이유가 없다는 말임
*정리*
@RequestBody(Client - >Server)
@ResponseBody(Server -> Client)
@RestController(@ResponseBody과 함께 사용 금지)
프로젝트 생성시 주의사항
0.초기설정 프로퍼티스
Project Facets에서
Dynamic Web Module 4.0 ,
Java 11
( Dynamic Web Module = servlet임. 버전을 동일하게 변경)
변경하고 Apply
Server 선택하고 Apply
Targeted Runtimes 에서 서버 선택하고 Apply
Java Build Path > Libraries > Classpath > Add Library > JUnit 선택하고 Next > Finish
Apply and Close 로 닫기
1. pom.xml 2에서 복붙하고 name 이랑 artifactname 변경
2. xml 파일들(web,root,service) 삭제
3. config 패키지 생성 후 복붙 , RootConfig 변경
4. 서버 재시작 하고
프로젝트 우클릭 Maven > Update Project 하기
서버 문제가 생기면 아래 글 보기
@GetMapping("{name}") -> url로 name값을 전송.
@PathVariable("name")String name -> url로 전송된 데이터를 매개변수에 저장
return new ResponseEntity<Integer>(price, HttpStatus.OK); -> ResponseEntity : HTTP 응답에 상태 코드, 헤더 및 본문(body)
serviceImple에 @Service 꼭 넣기!
@Autowired 도 메소드 오버라이드 위에 꼭 넣어줘야함
클라이언트에서 서버로 POST 요청을 보내는 코드
'Content-Type' : 'application/json'은 전송하는 데이터의 형식을 지정
이 경우에는 JSON 형식으로 데이터를 전송하기 때문에
'application/json'으로 설정되어 있다.
서버는 이 헤더를 보고 요청의 내용 형식을 확인하고 이를 처리할 수 있다.
JSON.stringify(obj)는 JavaScript 객체 obj를 JSON 문자열로 변환하는 함수.
이렇게 변환된 JSON 데이터가 서버로 전송된다.
이 코드는 댓글을 추가하는 기능을 구현하기 위해 사용되었다.
클라이언트에서 댓글 데이터를 JSON 형식으로 서버에 전송하여 처리하고, 성공적으로 처리된 경우에는
'댓글 입력 성공'이라는 경고창을 표시하고,
getAllReply() 함수를 호출하여 업데이트된 댓글 목록을 다시 가져올 것이다.
db 연결할 때 pom.xml을 써서 db연결을 해놨기 때문에... 자료에서 ojdbc.jar 파일 연결 설정 안해도댐.
'백엔드 교육과정 > 4월' 카테고리의 다른 글
2024.04.29 _ [SpringMVC] 요약 정리하기 (0) | 2024.04.29 |
---|---|
2024.04.24 _ Spring3 댓글 기능(업데이트, 삭제) , Transaction (0) | 2024.04.24 |
2024.04.22 _ 스프링 MVC 프로젝트 (with MyBatis) 구성 예시 / log4j.xml -> debug (0) | 2024.04.22 |
[Spring] UnsatifiedDependencyException 오류 (0) | 2024.04.22 |
[Spring]oracle 연결 실패 : ORA-12541: 데이터베이스에 접속할 수 없습니다. %s에 리스너가 없습니다. (CONNECTION_ID=/APpPLBRRnWCCKGqWbESfQ==) 오류 (0) | 2024.04.22 |