Spring boot Project Trouble Shooting

kimuki·2024년 6월 5일

Spring boot Project Trouble Shooting

1 문제.

mapper.xml 파일 생성 시 에러 발생
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gd.hr.mapper.JoinMapper"></mapper>

위의 코드 에서
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> --- 부분에서 빨간 줄 발생

1 해결.

Window - Preferences - xml 검색 - XML (Wild Web Developer) 에서
Download external resources like referenced DTD, XSD 체크 후 Apply

2 문제.

컨트롤러 통해 view 접근 시 NoResourceFoundException 예외와 함게
404 error 발생 (no static resource error)

접근한 url = http://localhost/hr/deptEmpList

2 해결.

해당 프로젝트 application.properties 설정에서
server.servlet.context-path=/ <-- 로 설정 되어 있있었기 때문에
접근한 url인 http://localhost/hr/deptEmpList 에서 hr 부분을 인식하지 못함

server.servlet.context-path=/hr <--로 수정 후 view 접근 성공 확인

3 문제.

게시판 글 작성 액션 쿼리에서 SQLSyntax error 발생

3 해결.

INSERT 문에서 컬럼에 Alias를 사용해서 에러가 났던것
INSERT 문에서는 Alias 쓸 필요가 없음 (바보같은 실수 어휴)

4 문제.

homework MyBatis 과제 진행 도중 input checkbox를 사용해
여러개의 value를 받아서 List<String>hobbyName 변수에 넣으려고 했지만
반응이 없고 계속 null을 반환함

4 해결.

input checkbox로 넘기는 parameter의 name 속성을 name="hobby" 로
지정해뒀던 반면, parameter를 저장할 AddMember DTO의
List<String> 변수의 이름은 hobbyName 이었기 때문에

input checkbox의 name 속성명인 hobby 와
AddMember DTO의 변수명인 hobbyName이 일치하지 않았기 때문에
parameter가 제대로 전달되지 않았다

DTO의 변수명을 List<String> hobby로 변경 후 관련 Service와 Controller의
변수명을 hobby로 변경 후 정상적으로 DB에 데이터가 저장되는 것 확인
  1. 문제가 되었던 코드

AddMember.java (DTO)

package com.gd.homework.dto;

import java.util.List;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AddMember {
	
	private String memberId;
	private String memberPw;
	private String memberName;
	
	private List<String> hobbyName;
}

MemberService.java (Service)

package com.gd.homework.service;

@Service
@Slf4j
@Transactional
public class MemberService {
	
	@Autowired
	MemberMapper memberMapper;
	
	@Autowired
	HobbyMapper hobbyMapper;
	
	public void addMember(AddMember am) {
		
		Member m = new Member();
		m.setMemberId(am.getMemberId());
		m.setMemberName(am.getMemberName());
		m.setMemberPw(am.getMemberPw());
		
		memberMapper.insertMember(m);
		log.debug(TeamColor.YELLOW + "m : " + m.getMemberId());
		log.debug(TeamColor.YELLOW + "m : " + m.getMemberName());
		log.debug(TeamColor.YELLOW + "m : " + m.getMemberPw());
		
		if(am.getHobbyName() != null) {
			for(String s : am.getHobbyName()) {
				Hobby h = new HobbyName(m.getMemberNo(), s);
				hobbyMapper.insertHobby(h);
				log.debug(TeamColor.YELLOW + "h : " + h.getHobbyName());
			}
		}	
	}
}

signUpMember.jsp (View - Post request)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Sign Up Member</title>
</head>
<body>
	<h1>회원가입</h1>
	<form method="post" action="${pageContext.request.contextPath}/signUpMember">
		<div>
			Member ID : 
			<input type="text" name="memberId">
		</div>
		<div>
			Member PW : 
			<input type="text" name="memberPw">
		</div>
		<div>
			Member Name : 
			<input type="text" name="memberName">
		</div>
		<div>
			<input type="checkbox" name="hobby" value="football">축구
			<input type="checkbox" name="hobby" value="baseball">야구
			<input type="checkbox" name="hobby" value="basketball">농구
		</div>
		
		<button type="submit">회원가입</button>
	</form>
</body>
</html>

profile
Road OF Developer

0개의 댓글