반응형
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
                <property name="url" value="jdbc:sqlserver://<주소>:<포트>;databaseName=<DB이름>;encrypt=true;trustServerCertificate=true;"/>
                <property name="username" value="이름"/>
                <property name="password" value="비밀번호"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/dbMapper.xml"/>
        <mapper resource="mapper/itemMapper.xml"/>
    </mappers>
</configuration>

 

encrypt=true;trustServerCertificate=true;

이 구문을 넣어줘야한다.

반응형
반응형

프로젝트 구조

 

1. 프로젝트 생성시 Mavin으로 생성

- pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>swing02_mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- MyBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11 -->
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc11</artifactId>
            <version>23.5.0.24.07</version>
        </dependency>

        <dependency>
            <groupId>com.oracle.ojdbc</groupId>
            <artifactId>orai18n</artifactId>
            <version>19.3.0.0</version>
        </dependency>
    </dependencies>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

 

 

(ps) libs폴더에 테마를 위한 파일들을 넣어주고 "프로젝트 구조 > 종속 요소"에서 추가해준다. 개인적 취향...

idw-gpl.jar
0.70MB
JTattoo.jar
0.62MB
liquidlnf.jar
0.35MB
ojdbc6-11.2.0.4.jar
2.61MB
quaqua.jar
1.94MB

 

 

2. mybatis-config.xml에서 DB정보 생성

 

3. org.example.mapper > dbMapper 인터페이스 생성

package org.example.mapper;

import org.example.model.dbModel;
import java.util.List;

public interface dbMapper {
    List<dbModel> selectAll();
}

 

4. org.example.dto> dbDto생성 (레코드 형식이 편해서 클래스 대신 레코드를 주로 사용함)

package org.example.dto;

public record dbDto(
        String emp_no,
        String emp_x,
        String kornm_n,
        String hannm_n,
        String engnm_n,
        String res
) {
}

 

5. MyBatisUtil 생성

package org.example;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }

    public static SqlSession getSession() {
        return sqlSessionFactory.openSession();
    }
}

 

 

6. service > DbService 생성

DAO를 생성하는 경우가 많이 있는 것 같은데, 개인적으로는 복잡도가 낮아서 service만 만들어 구현해도 큰 어려움이 없는것 같다. DAO에 대한 개념도 없는 상태라, 프로젝트의 복잡도만 늘리는 것 같아서 Service만 구현했다.

package org.example.service;

import org.apache.ibatis.session.SqlSession;
import org.example.MyBatisUtil;
import org.example.dto.dbDto;
import org.example.mapper.dbMapper;

import java.util.List;

public class DbService {
    public List<dbDto> selectAll(){
        SqlSession session = MyBatisUtil.getSession();
        List<dbDto> list = null;

        try{
            dbMapper mapper = session.getMapper(dbMapper.class);
            list = mapper.selectAll();
        } catch (Exception ex){
            ex.printStackTrace();
        } finally {
            session.close();
        }
        return list;
    }
}

 

 

7. resources > mapper > dbMapper.xml 생성

Spring에서 사용하던 Mybatis와 동일하게 생성

<?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="org.example.mapper.dbMapper">
    <select id="selectAll" resultType="org.example.model.dbModel">
        select emp_# as emp_no,
        emp_x,
        kornm_n,
        hannm_n,
        engnm_n,
        res_#1 as res
        from temp a
        where a.kornm_n='김동개'
    </select>
</mapper>

 

8. org.example.view > MainView.java 생성

package org.example.view;

import org.example.dto.dbDto;
import org.example.service.DbService;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

public class MainView extends JFrame {
        DbService dbService = new DbService();

        JFrame f1 =new JFrame();    // Main Frame
        JMenuBar mb = new JMenuBar(); // 메뉴바
        JPanel sidePanel = new JPanel(); // 사이드 패널
        JPanel contentPanel = new JPanel(); // 컨텐츠 패널
        JPanel footerPanel = new JPanel();  // 푸터 패널
        JButton jb1 = new JButton("search"); // 버튼 초기화
        JButton jb2 = new JButton("insert"); // 버튼 초기화
        JButton jb3 = new JButton("delete"); // 버튼 초기화

//      JTable data_table = new JTable(); //테이블 생성시에는 초기값과 헤더를 넣어줘야한다. 
//        이 작업은 초기 화면 생성하는 함수에 넣어주기 위해, 아래와 같이 null로 우선 생성한다.
        JTable data_table = null;

        public void set_style(Component target){
            // 스타일 적용(Look & Feel)
            try{
                UIManager.setLookAndFeel ("com.birosoft.liquid.LiquidLookAndFeel"); 	//Liquid
            }catch(Exception e){
                System.out.println(e + "오류 발생");
            }
            SwingUtilities.updateComponentTreeUI(target) ;
        }

        public void createFrame(){
            // Main Frame 세팅
            f1.setSize(1024,760);//크기
            f1.setDefaultCloseOperation(f1.EXIT_ON_CLOSE);
            f1.setLocationRelativeTo(null);

            // 스타일 적용
            f1.setDefaultLookAndFeelDecorated(true);
            set_style(f1);

            // 아이콘 적용
            Image icon = Toolkit.getDefaultToolkit().getImage("D:\\7_System_dev2\\4_Java\\01_gui\\src\\icon.png");
            f1.setIconImage(icon);

            // 레이아웃 적용
            BorderLayout bl = new BorderLayout();
            f1.setLayout(bl);

            // 화면 요소 생성 및 추가
            createMenu();
            createSidePanel();
            createContentPanel();
            createFooter();

            f1.add(mb, BorderLayout.NORTH);
            f1.add(sidePanel, BorderLayout.WEST);       // f1라는 프레임에 sidePanel추가
            f1.add(contentPanel, BorderLayout.CENTER);  // f1라는 프레임에 contentPanel추가
            f1.add(footerPanel, BorderLayout.SOUTH);    // f1라는 프레임에 FooterPanel추가

            f1.setTitle("Frame Test");//제목
            f1.setVisible(true);//생성
        }

        // 메뉴바
        public void createMenu(){
            JMenu fileMenu = new JMenu("File");
            fileMenu.add(new JMenuItem("New"));
            fileMenu.add(new JMenuItem("Open"));
            fileMenu.add(new JMenuItem("Preferences"));

            mb.add(fileMenu);
            mb.add(new JMenu("Edit"));
            mb.add(new JMenu("About"));
            mb.add(new JMenu("Help"));
            setJMenuBar(mb);
        }

        // 사이드 패널
        public void createSidePanel(){
            sidePanel.setPreferredSize(new Dimension(100, 300)); // 사이드패널 사이즈 조절
            sidePanel.setBorder(BorderFactory.createEmptyBorder(15 , 10, 10 , 10));
//            sidePanel.setLayout(new BoxLayout(sidePanel, BoxLayout.Y_AXIS));

            sidePanel.add(jb1);
            sidePanel.add(jb2);
            sidePanel.add(jb3);

            set_style(sidePanel);

            jb1.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    data_mapping();

                    // 패널 갱신
                    contentPanel.revalidate();
                    contentPanel.repaint();
                }
            });
        }

        // Contents 패널
        public void createContentPanel(){
            contentPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
            contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
            JLabel Headline = new JLabel("Swing Table Data with Styles");
            Font f = new Font("고딕", Font.BOLD,20);
            Headline.setFont(f);
            contentPanel.add(Headline);

            // 테이블 준비
            String[] header = {"EMP No", "Name"};
            String[][] contents = {{"",""},{"",""},{"",""}};
            data_table = new JTable(contents, header);
            Font font = new Font("고딕", Font.PLAIN,12);
            data_table.setFont(font);
            contentPanel.add(new JScrollPane(data_table), BorderLayout.CENTER);
			// JScrollPane(data_table)에 넣어주지 않으면 header가 나타나지 않는다.
            set_style(contentPanel);
        }

        // Footer
        public void createFooter(){
            footerPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
            footerPanel.setBackground(Color.orange);
            JLabel Footer = new JLabel("Copyright by Wilkyway");
            footerPanel.add(Footer);

            // set_style(footerPanel);
        }

        public void data_mapping() {
            List<dbDto> models = dbService.selectAll();

            int i=0;
            for (dbDto model : models) {
                System.out.println("ID: " + model.emp_no() + ", Name: " + model.kornm_n());
                data_table.setValueAt(model.emp_no(),i,0);
                data_table.setValueAt(model.kornm_n(),i,1);
                i++;
            }
        }

}

 

 

8. Main.java

package org.example;
import org.example.view.MainView;

public class Main {

    public static void main(String[] args) {
        MainView mp = new MainView();
        mp.createFrame();
    }
}

 

 

<결과>

반응형
반응형

1. Tailwind CSS 와 PostCSS

npm install tailwindcss postcss autoprefixer gatsby-plugin-postcss
 

2. Tailwind CSS 초기화

npx tailwindcss init

tailwind.config.js 파일이 생성됨

3. PostCSS 설정

프로젝트 루트 디렉토리에 postcss.config.js 파일을 생성한다.

module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
}

 

4. Gatsby 설정파일에 PostCSS 플러그인 추가

gatsby-config.js

module.exports = {
  ...
  plugins: [
    `gatsby-plugin-postcss`,
    ...

 

5. Global Style 파일 생성 (src/tailwind.css)

@tailwind base;
@tailwind components;
@tailwind utilities;

6. Global CSS 를 gatsby-browser.js에 추가

/**
 * Implement Gatsby's Browser APIs in this file.
 *
 * See: https://www.gatsbyjs.com/docs/reference/config-files/gatsby-browser/
 */

// You can delete this file if you're not using it
import "./src/tailwind.css";

7. PurgeCSS 설정(Optional but Recommended for Production)

옵셔널이라고 되어있는데, 이게 되어야 정상 작동함.

/** @type {import('tailwindcss').Config} */

module.exports = {
  purge: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'],
  darkMode: false, // or 'media' or 'class'
  theme: {
    extend: {},
  },
  variants: {
    extend: {},
  },
  plugins: [],
}
반응형
반응형

1. next.config.mjs 수정

 

- 위와 같은 package.json 이 있다고 할 때, "npm run build" 를 하면 .next 폴더가 만들어지는데, next.config.mjs파일을 아래와 같이 수정해서 out파일을 배포하도록 설정을 바꿔줘야함.

 - 이미지 등의 경로를 제대로 인식할 수 있도록 basePath를 설정합니다.  [Next.js 의 모든 URL 앞에 추가되는 기본 경로를 설정]

/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'export',
  basePath: '',
  images: {
    unoptimized: true,
  },
};

export default nextConfig;

 

예전에는 next build 후 out폴더에 static 파일들을 생성하도록 next export 명령어도 했어야 했던 것 같은데, 이번 14버전에서는 next export 대신 config파일에서 output: 'export' 를 설정해주는 것만으로도 작동합니다.

 

.next폴더와 out폴더 두개가 모두 생성되는데, netlify에 배포하는 폴더는 out 폴더입니다. 

 

2. Nelify플러그인 설치

무슨 역할을 하는지는 모르겠지만, 이것도 설치해야한다고 합니다.

npm install @netlify/plugin-nextjs

 

3. netlify.toml 생성

[build]
  command = "npm run build"
  publish = "out"

[[plugins]]
  package = "@netlify/plugin-nextjs"

 

 

이미지는 나왔는데, CSS가 아직 제대로 적용이 안되었네요. 조금 더 검토해봐야겠습니다.

 

오늘은 여기까지!

반응형
반응형

최신 오라클  라이브러리가 cx_Oracle에서 oracledb 변경되었다.

 

Insert

# Plan MH 일괄 추출
from datetime import datetime

import oracledb
import os


os.putenv('NLS_LANG', '.UTF8')
now = datetime.today()

# DB연결
conn = oracledb.connect(user='myuser', password='1234', dsn='abcd.abcde.com:1526/abcd')
cursor = conn.cursor() #지시자 생성

query_str = "insert into SOME_TABLE values (:1,:2,:3,:4,:5,:6,:7,:8)"
data = ('20240125','AAAA','BBBB','1400350','CCCC','2',now,'DDDD')
cursor.execute(query_str,data)
conn.commit()

conn.close()
반응형
반응형

 

1. template/hello.html

데이터를 받아들일 html템플릿을 만들어둔다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello</title>
</head>
<body>
    <p th:text="${user}">Hello Thymeleaf!!</p>
</body>
</html>

 

2.Controller.java

자료를 넘길때는 ModelAndView객체에 담아서 보낸다.

...
	
@GetMapping("/user")
public ModelAndView hello(@RequestParam("id") String id) throws Exception {

    ModelAndView mav = new ModelAndView();		
    UserDto res = userService.getUserById(id);

    mav.setViewName("hello");	
    mav.addObject("user",res.getName());

    return mav;
}
    
 ...
반응형
반응형

 

 

1. Controller: UserProfileController.java

package com.example.myba.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.myba.dto.ItemDto;
import com.example.myba.dto.ResponseDto;
import com.example.myba.service.QuickService;

import io.swagger.v3.oas.annotations.parameters.RequestBody;
import lombok.extern.slf4j.Slf4j;

@RestController
@Slf4j
public class UserProfileController {
	
	@Autowired
	private QuickService quickService; //자동으로 값을 넣은 객체를 생성해줌. DI
	
	@GetMapping("/dummy")
	public String dummy() {
//		log.info("dummy");
		return "{}";
	}
	
	@GetMapping("/dummy2")
	public String dummy2() {
		return "dummy2";
	}
	
	@GetMapping("/member")
	public String getMember(@RequestParam("empNo") String empNo) {
		return "OK";
	}

	@GetMapping("/company/{id}")
	public String getCompany(@PathVariable("id") String id) {
		return "OK";	
	}
	
	@PostMapping("/item")
	public ResponseDto registerItem(@RequestBody ItemDto item) {
		
		boolean b = quickService.registerItem(item);
		
		if(b==true) {
			ResponseDto responseDto = new ResponseDto();
			responseDto.setMessage("ok");
			
			return responseDto;
		}
		
		ResponseDto responseDto = new ResponseDto();
		responseDto.setMessage("fail");
		
		return responseDto;
	}
	
	@PostMapping("/user")
	public String registerUser(@RequestBody String user) {		
		return "OK";
	}
	
	@GetMapping("/item")
	public ItemDto getItem(@RequestParam("id") String id) {
		ItemDto res = quickService.getItemById(id);
		return res;
	}
	
}

 

2. dto

- ItemDto.java

package com.example.myba.dto;

public class ItemDto {
	
	private String id;
	
	private String name;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
}

 

 

- ResponseDto.java

package com.example.myba.dto;

public class ResponseDto {
	private String message;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
}

 

3. mapper: QuickMapper.java

package com.example.myba.mapper;

import java.util.HashMap;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface QuickMapper {
	HashMap<String, Object> findById(HashMap<String, Object> paramMap);
}

 

 

 

4. mapper.xml: QuickMapper.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.example.myba.mapper.QuickMapper">

	<select id="findById" parameterType="hashmap" resultType="hashmap">
		SELECT id, name FROM item WHERE id = #{id}
	</select>
	
</mapper>

 

 

5. service: QuickService.java

package com.example.myba.service;

import java.util.HashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.myba.dto.ItemDto;
import com.example.myba.mapper.QuickMapper;

import lombok.extern.slf4j.Slf4j;

@Service
@Slf4j
public class QuickService {
	
	@Autowired QuickMapper quickMapper;
	
	public boolean registerItem(ItemDto itemDto) {
		// TODO:
		
		return true;
	}
	
	public ItemDto getItemById(String id) {
		
		HashMap<String, Object> paramMap = new HashMap<>();
		paramMap.put("id", id);
		
		HashMap<String, Object> res = quickMapper.findById(paramMap);
		
		
		ItemDto itemDto = new ItemDto();
		itemDto.setId((String)res.get("ID"));;
		itemDto.setName((String)res.get("NAME"));
		
		return itemDto;
	}
}

 

6. application.properties

spring.application.name=myba

#spring.datasource.url=jdbc:mysql://localhost:3306/personal_info
#spring.datasource.username=asdf
#spring.datasource.password=1234
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:~/test
spring.datasource.username=asdf
spring.datasource.password=1234

spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@12.34.56.78:1526:abcde
spring.datasource.username=asdf
spring.datasource.password=1234


mybatis.type-aliases-package=com.example.myba.mapper 
# Mybatis mapper 위치 설정
mybatis.mapper-locations= mybatis-mapper/*.xml

 

 

7. pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.2.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>myba</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>myba</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>3.0.3</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter-test</artifactId>
			<version>3.0.3</version>
			<scope>test</scope>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui -->
		<dependency>
		    <groupId>org.springdoc</groupId>
		    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
		    <version>2.1.0</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
		    <groupId>org.projectlombok</groupId>
		    <artifactId>lombok</artifactId>
		    <version>1.18.30</version>
		    <scope>provided</scope>
		</dependency>
		
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
		</dependency>


	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

 

 

 

 

반응형
반응형

여기서 최신버전을 복사해서 pom.xml의 디펜던시에 넣어준다.

 

Maven Repository: org.springdoc » springdoc-openapi-starter-webmvc-ui » 2.5.0 (mvnrepository.com)

<!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui -->
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.5.0</version>
</dependency>

 

localhost:8080/swagger-ui/index.html

 

반응형

+ Recent posts