javaboiii의 Spring

Spring - 비동기 처리

javaboiii 2024. 10. 14. 21:06

Spring

스프링은 서블릿(not POJO)를 사용하지 않고

비동기 처리를 할 수 있음

 

ViewResolver가 동작할 타이밍
redirect:이 없으니까
./true.jsp 응답할 수 있음

 

ViewResolver의 개입을 막는 방법

  1. 메서드 시그니처에 @ResponseBody 추가
  2. class에 @RestController 추가
    @RestController는  부트에서 만들어짐

text 반환

@RequestMapping(value="/checkMID.do", method=RequestMethod.POST)
public @ResponseBody String checkMID(MemberDTO memberDTO) {
    System.out.println("CheckController.java checkMID() POST 시작");

    memberDTO.setCondition("MEMBER_ID_CHECK");
    memberDTO = memberService.selectOne(memberDTO);
    String result = "false";
    if(memberDTO != null) {
        result = "true";
    }		
    return result;
}

 

Object 반환

@RequestMapping(value="/searchBoard.do", method=RequestMethod.POST)
public @ResponseBody List<BoardDTO> searchBoard(@RequestBody BoardDTO boardDTO) {
    System.out.println("SearchBoardController.java searchBoard() POST 요청 시작");

    // 데이터 로그
    System.out.println("SearchBoardController.java searchBoard() search_keyword : [ "+boardDTO.getSearch_keyword()+" ]");
    System.out.println("SearchBoardController.java searchBoard() search_content : [ "+boardDTO.getSearch_content()+" ]");

    if(boardDTO.getSearch_content() != null) {
        String search_content = boardDTO.getSearch_content();
        System.out.println(search_content);
        String trim_content = search_content.trim();
        System.out.println(trim_content.length());
        boardDTO.setSearch_content(trim_content);
        System.out.println(boardDTO.getSearch_content());
    }


    if(boardDTO.getSearch_keyword().equals("WRITER")) {
        boardDTO.setBoard_condition("SELECT_BY_WRITER");
        if(boardDTO.getSearch_content().length() <= 0) {
            boardDTO.setSearch_content("작성자 검색을 공백으로 검색하면 나오는 게시글");
        }
    }
    else if(boardDTO.getSearch_keyword().equals("CONTENT")) {
        boardDTO.setBoard_condition("SELECT_BY_CONTENT");
        if(boardDTO.getSearch_content().length() <= 0) {
            boardDTO.setSearch_content("내용 검색을 공백으로 검색하면 나오는 게시글"); 
        }
    }
    else if(boardDTO.getSearch_keyword().equals("ALL")) {
        boardDTO.setBoard_condition("ALL");
    }

    List<BoardDTO> datas = this.boardService.selectAll(boardDTO);

    System.out.println("안녕하세요");
    System.out.println(datas.size());
    for (BoardDTO data : datas) {
        System.out.println(data);
    }
    System.out.println("반가오ㅏ요");

    System.out.println("SearchBoardController.java searchBoard() POST 요청 끝");
    return datas;
}

스프링 특성상 다른 언어와 붙는 경우가 많기 때문에
자바에서 쓰는 ArrayList를 쓰기보다
다른 언어에서도 사용하는 List를 쓰는 것이 좋음

비동기 반환값이 여러 개 일때는 dataType(반환 타입)을 작성해야됨
String 보다 무거운 것이 반환되면 JSON으로 지정하는 것이 안정성에 좋음

js에서 json으로 반환을 받을 시
컨트롤러에서도 json으로 데이터를 받음
요청 타입 contentype : application/json
보낼 데이터 data : JSON.stringify({변수명 : 데이터})

@RequestBody 를 추가함으로써 주고 받는 데이터가
JSON임을 알 수 있음