Notice
Recent Posts
Recent Comments
Link
투케이2K
17. (spring/스프링) controller 컨트롤러에서 다른 컨트롤러 호출 실시 및 타임리프 view 뷰 이동 본문
[개발 환경 설정]
개발 툴 : 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 호출]
반응형
'Spring' 카테고리의 다른 글
Comments