본문 바로가기
☕Java/Spring

[20210720] Spring + MyBatis를 이용한 로그인 및 게시판 4 - Controller

by 캔 2021. 7. 20.

지난번 프로젝트의 컨트롤러와 구조는 같다. 다만, 로그인 및 회원 정보, 세션 정보를 JSON으로 전송하기 위해 @ResponseBody 애너테이션을 사용하였다. 그리고 @ControllAdvice, @Bean도 사용하였는데 이에 대해서는 나중에 새로운 포스팅에서 따로 설명하겠다.

//CustomerController.java

package customer.control;

import java.util.List;

import javax.inject.Inject;
import javax.servlet.http.HttpSession;

import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

import customer.dao.BoardCDao;
import customer.dao.CustomerDao;
import customer.dto.BoardDTO;
import customer.dto.CustomerDTO;

@Controller
public class CustomerController {
	
	@Inject
	private CustomerDao cdao;
	
	@Inject
	private BoardCDao bcdao;
		
	@RequestMapping(value="/", method=RequestMethod.GET)
	public String index() {
		return "index";
	}
	
	@ResponseBody
	@RequestMapping(value="/login", method=RequestMethod.POST)
	public int login(CustomerDTO c, HttpSession Hsession) {
		return cdao.Login(c, Hsession);
	}
	
	@RequestMapping(value="/logout", method=RequestMethod.GET)
	public String logout(HttpSession Hsession) {
		Hsession.removeAttribute("u");
		return "redirect:/";
	}
	
	@RequestMapping(value="/main", method=RequestMethod.GET)
	public String main() {
		return "main";
	}
	
	@RequestMapping(value="/register", method=RequestMethod.GET)
	public String register() {
		return "register";
	}
	
	@ResponseBody
	@RequestMapping(value="/register", method=RequestMethod.POST)
	public int register(CustomerDTO c) {
		System.out.println("여기는 컨트롤러 안.");
		return cdao.Register(c);
	}
	
	@RequestMapping(value="/write_bbs", method=RequestMethod.GET)
	public String write_bbs(HttpSession session) {
		CustomerDTO u = (CustomerDTO)session.getAttribute("u");
		if(u==null) return "redirect:/";
		return "write_bbs";
	}
	
	@ResponseBody
	@RequestMapping(value="/write_bbs", method=RequestMethod.POST)
	public int write_bbs(BoardDTO b, HttpSession session) {
		CustomerDTO u = (CustomerDTO) session.getAttribute("u");
		if(u==null) return -1;
		b.setB_user(u.getC_no());
		return bcdao.write_bbs(b);
	}
	
	@ResponseBody
	@RequestMapping(value="/bbs_all", method=RequestMethod.GET)
	public List<BoardDTO> bbs_all() {
		return bcdao.bbs_all();
	}
	
	@ResponseBody
	@RequestMapping(value="/get_bbs", method=RequestMethod.GET)
	public BoardDTO get_bbs(BoardDTO b) {
		return bcdao.get_bbs(b);
	}
	
	@ControllerAdvice
	public class JsonAdviceController extends AbstractJsonpResponseBodyAdvice {
		public JsonAdviceController() {
			super("callback");
		}
	}
	
	@Bean
	public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
		
		MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
		ObjectMapper objectMapper = new ObjectMapper();
		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		jsonConverter.setObjectMapper(objectMapper);
		return jsonConverter;
	}
}