투케이2K

17. (spring/스프링) controller 컨트롤러에서 다른 컨트롤러 호출 실시 및 타임리프 view 뷰 이동 본문

Spring

17. (spring/스프링) controller 컨트롤러에서 다른 컨트롤러 호출 실시 및 타임리프 view 뷰 이동

투케이2K 2021. 7. 28. 14:37

[개발 환경 설정]

개발 툴 : inteli j

개발 언어 : spring


[폴더 및 파일 추가]


[소스코드 : build.gradle 타임리프 의존성]

//thymeleaf
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

[소스코드 : application.yml]

spring:
  devtools:
    livereload:
      enabled: true
  datasource:
    driver-class-name: oracle.jdbc.OracleDriver
    url: jdbc:oracle:thin:@115.68.176.215:1521:username
    username: userschema
    password: pw1234
  thymeleaf:
    cache: false



server:
  port: 7000



mybatis:
  mapper-locations: classpath:mappers/*.xml
  type-aliases-package: com.project.solutionpackage.model

[소스코드 : controller >> ModuleApiController]

package com.project.solutionpackage.controller;

import org.springframework.boot.configurationprocessor.json.JSONArray;
import org.springframework.boot.configurationprocessor.json.JSONException;
import org.springframework.boot.configurationprocessor.json.JSONObject;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.util.Base64Utils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;

// [크로스 도메인 접속 허용 설정]
@CrossOrigin("*")

// [RestController = rest api 요청 / Controller = view 연결]
@RestController
public class ModuleApiController {

    // [post : Map 방식]
    // [경로 지정 : http://localhost:7000/cotrollChange?idx=1&name=투케이]
    // [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
    // [output : 모델에서 설정한 return 타입으로 결과를 반환합니다]
    @PostMapping("/cotrollChange")
    public String cotrollChange(@RequestParam Map<String, String> param) {
        System.out.println("\n");
        System.out.println("=======================================");
        System.out.println("[ModuleApiController] : [cotrollChange] : [start]");
        System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
        System.out.println("[request idx] : " + String.valueOf(param.get("idx")));
        System.out.println("[request name] : " + String.valueOf(param.get("name")));
        System.out.println("=======================================");
        System.out.println("\n");

        // [체이닝 방식으로 다른 컨트롤러 호출 실시]
        if(param.get("idx") != null && param.get("idx").length() >0
                && param.get("name") != null && param.get("name").length() >0){

            // [api : testPostBodyJson 메소드 호출 및 파라미터 정의 실시]
            Map<String, String> reqMap = new HashMap<>(); // [testPostBodyJson 메소드 인풋 값이 Map이므로 Map 선언]
            reqMap.put("idx", param.get("idx"));
            reqMap.put("name", param.get("name"));

            // [메소드 호출 >> testPostBodyJson 넘겨준 return 데이터 받은 후 >> cotrollChange 에서 최종 리턴 실시]
            return testPostBodyJson(reqMap);
        }

        // return 리턴 데이터 반환
        return "Fail";
    }


    // [post body json : Map 방식]
    // [경로 지정 : http://localhost:7000/testPostBodyJson]
    // [body json 데이터 : {"idx":"1", "name":"투케이"}]
    // [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
    // [output : 모델에서 설정한 return 타입으로 결과를 반환합니다]
    @PostMapping("/testPostBodyJson")
    public String testPostBodyJson(@RequestBody Map<String, String> param) {
        System.out.println("\n");
        System.out.println("=======================================");
        System.out.println("[ModuleApiController] : [testPostBodyJson] : [start]");
        System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
        System.out.println("[request idx] : " + String.valueOf(param.get("idx")));
        System.out.println("[request name] : " + String.valueOf(param.get("name")));
        System.out.println("=======================================");
        System.out.println("\n");

        // 리턴을 반환할 JSON 데이터 생성 실시
        JSONObject jsonObject = null;
        try {
            jsonObject = new JSONObject();
            jsonObject.put("idx", String.valueOf(param.get("idx")));
            jsonObject.put("name", String.valueOf(param.get("name")));
        }
        catch (Exception e){
            e.printStackTrace();
        }

        // return 리턴 데이터 반환 [json 형식]
        return jsonObject.toString();
    }

}

[소스코드 : controller >> ThymeLeafController]

package com.project.solutionpackage.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// [크로스 도메인 접속 허용 설정]
@CrossOrigin("*")

// [RestController = rest api 요청 / Controller = view 연결]
@Controller
public class ThymeLeafController {

    // [get 방식 : 파라미터 받는 방식]
    // [경로 지정 : http://localhost:7000/testTagThymeleafTwo?name=홍길동]
    // [get 로직 : pTag 라는 key에 파라미터 값으로 들어온 데이터를 넣어서 testThymeleaf.html로 리턴합니다]
    // [html 로직 : testThymeleaf.html은 리턴 받은 pTag key 값을 불러와서 데이터를 표시해줍니다]
    @GetMapping("/testTagThymeleafTwo")
    public String testTagThymeleafTwo(@RequestParam Map<String, String> param, Model model){
        //input으로 들어온 파라미터 데이터 확인 실시
        System.out.println("\n");
        System.out.println("=======================================");
        System.out.println("[ThymeLeafController] : [testTagThymeleafTwo] : [start]");
        System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
        System.out.println("[request name] : " + String.valueOf(param.get("name")));
        System.out.println("=======================================");
        System.out.println("\n");

        // [testPostBodyJson 호출 및 Map 파라미터 데이터 정의]
        Map<String, String> reqMap = new HashMap<>(); // [testPostBodyJson 메소드 인풋 값이 Map이므로 Map 선언]
        reqMap.put("idx", "1");
        reqMap.put("name", param.get("name"));

        String data = new ModuleApiController().testPostBodyJson(reqMap); // [testPostBodyJson 호출 및 리턴 데이터 저장]

        // [html에 반환할 key, value 지정 실시]
        model.addAttribute("pTag", data); // [일반 key, value]
        return "testTagThymeleaf"; // [testTagThymeleaf.html 호출]
    }

}

[소스코드 : templates >> testTagThymeleaf.html]

<!DOCTYPE html>
<!-- 타임리프를 사용하기 위한 태그 선언 -->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <!-- 내부 css -->
    <style>
        #pId {
            font-size: 200%;
            color: #0000ff;
        }
    </style>

    <!-- 내부 js -->
    <script>
        window.onload = function() {
            console.log("");
            console.log("[window onload] : [start]");
            console.log("");

            // 데이터 확인 실시
            var data = document.getElementById("pId").innerText;
            alert(data);
        };
    </script>

</head>

<body>

<!-- p 태그 삽입 실시 : 일반 key : value 형태 표시 -->
<p id = "pId">데이터 : <span th:text="${pTag}"></span></p>

</body>

</html>

[결과 출력]

[api to api 호출]

[view to api 호출]


 

반응형
Comments