달력

32024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

context root path

 

Servlet

절대경로

 

getServletContext().getRealPath("/")); // 웹서버의 Document Root

ex) getServletContext().getRealPath("/WEB-INF/web.xml")); 

 

또는 

 

config.getServletContext().getRealPath("/");

 

또는

 

getServletConfig().getServletContext().getRealPath("/");

 

또는

 

request.getSession().getServletContext().getRealPath("/");

 


 

JAVA

 

절대경로

 

this.getClass().getResource("").getPath(); // 현재 자신의 절대 경로

 

this.getClass().getResource("/").getPath(); // classes 폴더의 최상위 경로

 

this.getClass().getResource("/com/test/config/config.properties").getPath(); // classes 폴더에서부터 시작하여 해당파일까지의 절대 경로

 

this.getClass().getProtectionDomain().getCodeSource().getLocation(); // 자신의 파일명(*.class)이 포함된 절대경로

 

 

 

System.getProperty("user.home"); // 사용자 홈 디렉토리

 

System.getProperty("user.dir");  // 이클립스에서 실행시 이클립스 워크스페이스 (해당 프로젝트명 전까지)

 


 

ClassLoader 사용법

 

ClassLoader classLoader = (Thread.currentThread()).getContextClassLoader();

 

if(classLoader==null) classLoader = ClassLoader.getSystemClassLoader();

 

URL url = classLoader.getResource("struts.properties");

 

System.out.println(url.getPath());

 

WEB-INF/classes 에 있는 리소스만 참조합니다.

 

WEB-INF 와 같이 바로 아래에 있는 있는 리소스는 참조하지 못합니다.

 

getSystemClassLoader는 java application에서 사용되는 방법이고

 

(Thread.currentThread()).getContextClassLoader() 는 web에서 사용되는 방법입니다.

 

현재 클래스가 상속되는(부모) 클래스라면 클래스명.class.getResource 로 해야 합니다.

 

getClass()는 실행되는 현재 자신(자식클래스가 될 수 있습니다.)을 가리키기 때문입다.

 

WEB의 절대경로와는 다릅니다.

 

new File("").getAbsolutePath() : 절대경로

 

new File("").getCanonicalPath() : 상대경로

Posted by 한설림
|

[MyBatis] Parameter NULL 처리방법

 

[MyBatis] Parameter NULL 처리방법

 

 

 

 

NULL이 들어갈 수 있는 값에 대해 처리를 해주지 않으면 위와같은 ERROR가 뜬다.

 

방법1. Mapper.xml에서 타입명시

 

NULL로 세팅 되는 값에 jdbdType

을 명시해준다.

 

~~~~  #{board_viewcount, jdbcType=INTEGER}, #{board_content, jdbcType=VARCHAR}, ~~~~

 

=> NULL이 될 수 있는 타입에 모두 명시를 해줘야한다.

 

[지원하는 jdbcType 종류]

 

 

방법2. mybatis-config.xml에서 처리

 

방법1과 같은 방법은 하나하나 다 명시를 해줘야하고 다른 쿼리를 추가하게 되면 또 추가를 해야 하지만 이 방법은 mybatis-config.xml에 한 번 적어두기만 하면 된다.

 

<configuration> 

   <settings>            <!-- <settings>이 없으면 만들어줍니다. -->

     <setting name="jdbcTypeForNull" value="NULL" />

   <settings>

<configuration>

 

=> <settings> 태그를 <typeAliases> 아래에 두면 <configuration> 태그에 빨간줄(ERROR)이 생긴다. 그러니 위에 두자.

 

아래와 같이 설정하면 된다.

 

mybatis-config.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?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>

<!-- catcheEnabled =>  default값은 true이다. 아래와 같이 false 설정을 하면 모든 mapper xml의 cache 선언이 무효화가 됨 -->

    <settings>

        <setting name="cacheEnabled" value="false" />

        <setting name="jdbcTypeForNull" value="NULL" />

    </settings>

    

  <typeAliases>

    <package name="com.example.test"/>    

  </typeAliases>

 

</configuration>

Colored by Color Scripter

cs

 

 

'Programing' 카테고리의 다른 글

git, github 이용하기#1  (0) 2016.12.29
Posted by 한설림
|

Android를 개발하다 보면 code에서 Exception이 의심되는 부분에 예외처리를 해주게 되는데, 이 때 예외 발생의 처리부분을 테스트 하기 위해 해당 Exception이 발생되는 상황을 만들 수도 있겠지만 직접 Exception을 throw 해서 발생 시킬 수도 있다. Code는 다음과 같이 상당히 간단하다.

try {

/// 강제로 예외 발생
throw new Exception();
} catch(Exception e) {
/// 예외 발생시 처리 부분
}

  

try {
/// 강제로 예외 발생
Exception ex = new Exception();

throw ex;

} catch(Exception e) {

/// 예외 발생시 처리 부분

}
 

   

대부분의 경우는 예외 처리 부분에 Error code를 printout 하는 경우가 많지만 예외 발생시 특정 동작을 해야 하는 경우도 있을 것이다. 이런 경우 어렵게 상황을 만들기 보다는 해당 Exception을 강제로 발생시켜 처리부의 code를 검증해 보는 것이 좋을 것이다.

Exception은 catch() 부분에 따라 발생 시키면 된다.(예. throw new RuntimeException()…)



출처: https://withwani.tistory.com/154 [박투(搏鬪)]

Posted by 한설림
|

$('.부모 이름').on('click', '.걸고 싶은 대상', function() {

넣을 소스;

});



출처: https://cordinghouse.tistory.com/55 [코딩집]

'Programing > JQUERY' 카테고리의 다른 글

특정 영역(DIV) 여닫기 기능 Toggle  (0) 2017.11.23
DatePicker 기본 설정  (0) 2017.05.25
Posted by 한설림
|

input 자동완성 끄기 HTML

2019. 4. 29. 09:27

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

<---------------------------------   HTML  -------------------------------------------------->

<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/adminlte/bower_components/select2/dist/css/select2.min.css">

<script src="${pageContext.request.contextPath }/resources/adminlte/bower_components/select2/dist/js/select2.full.min.js"></script>


<select id="maz" name="maz" class="select2-selection-multiple" multiple="multiple">


</select>


<input type="hidden" name="maz2"  value="${maz}">


<---------------------------------   HTML  -------------------------------------------------->



<SCRIPT>


var data = [

{ id : 1 ,text : '수요계획' },

{ id : 2 ,text : 'RTF' },

{ id : 3 ,text : '과부족' },

{ id : 4 ,text : '생산계획' },

{ id : 5 ,text : '재고' },

{ id : 6 ,text : '재고율' },

{ id : 7 ,text : '생산요청량' }

];


// class 에 선언한 부분을 찾아서 select2 형태로 꾸며준다. 

$('.select2-selection-multiple').select2({

placeholder: "Select an option",    // 제일위에 보여질 타이틀 같은 옵션 

allowClear: true,

tags: true,

    tokenSeparators: [',', ' '],

    data : data ,      // 실제 Select Option에 들어갈 데이터 

});


// 서버에서 넘어온 값을 처리하는 로직 

var vMaz = $('input[name=maz2]').val();    

//ex) 복수의 값을 선택하면 1 , 3  같이 콤마를 경계로 한 String 값을

가진다

var vMaz2= vMaz.split(','); // 콤마를 기준으로 스플릿 해준다   [ 1 , 3 ] 

$('.select2-selection-multiple').val(vMaz2).trigger('change');  // 해당 value 의 값이 선택된다.

</SCRIPT>


'Programing > HTML' 카테고리의 다른 글

input 자동완성 끄기 HTML  (0) 2019.04.29
색상코드 , 컬러코드  (0) 2017.10.25
Posted by 한설림
|

요즘 ORM으로는 하이버네이트, JPA등 많이 사용하고 있으나, 역시 SI 쪽은 mybatis(ibatis)를 많이 사용된다.

문제는 mybatis는 xml로 sql을 관리하고 있는데 보통 조금 바꿀때 마다 서버를 재구동 시켜야 되는 문제가 된다.

시스템이 클 경우 재시작시 오랜 시간 걸리고 session 사용시 또 로그인을 해야 하는듯 개발의 흐름이 끊어지는 문제가 많이 발생한다.

예전에 ibatis를 사용 했을시에도 그런 부분이 많이 불편했었는데, 예전 대우정보시스템의 JCF 프레임워크에서 사용된다고 Refresh 되는 클래스 소스가 한번 공개 된적이 있었다. ( 몇년전인지 기억은 안나지만, 당시 인터넷 검색으로 찾았었다. )

그것이 버전이 문제인지 바로 사용이 안되어서 커스터마이징하고 사용을 잘사용 했었다.

그런데 지금 프로젝트가 mybatis로 진행하기 때문에 예전과 같은 불편함이 또 생기게 되었는데, 이 번에는 그 소스를 mybatis에 맞도로 커스터마이징 하기로 했다.  

일단 사전 조건은 

JDK 1.5 이상, Spring, mybatis, spring-mybatis 라이브러리가 설치되어 있는 환경에서만 된다.


일단 기존 Spring 에서 mybatis 설정을 보겠다.

보통 sqlSessionFactory를 이렇게 설정 한다. 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:mapperLocations="classpath*:패키지경로/**/mapper.xml" p:configLocation="classpath:/MapperConfig.xml" p:dataSource-ref="dataSource"/>

classpath*:패키지경로/**/mapper.xml  <-이부분이 재로딩 될 xml 파일경로 ( 자신의 프로젝트에 따라 변경 )

이부분에서 굵게 표시한 class 부분만 새로 만든 클래스로 바꾸면 모든게 해결된다.

<bean id="sqlSessionFactory" class="패키지경로.RefreshableSqlSessionFactoryBean" p:mapperLocations="classpath*:패키지경로/**/mapper.xml" p:configLocation="classpath:/MapperConfig.xml" p:dataSource-ref="dataSource" />

RefreshableSqlSessionFactoryBean.java

import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.core.io.Resource;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* mybatis mapper 자동 감지 후 자동으로 서버 재시작이 필요 없이 반영
*
* @author sbcoba
*/
public class RefreshableSqlSessionFactoryBean extends SqlSessionFactoryBean implements DisposableBean {
private static final Log log = LogFactory.getLog(RefreshableSqlSessionFactoryBean.class);
private SqlSessionFactory proxy;
private int interval = 500;
private Timer timer;
private TimerTask task;
private Resource[] mapperLocations;
/**
* 파일 감시 쓰레드가 실행중인지 여부.
*/
private boolean running = false;
private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
private final Lock r = rwl.readLock();
private final Lock w = rwl.writeLock();
public void setMapperLocations(Resource[] mapperLocations) {
super.setMapperLocations(mapperLocations);
this.mapperLocations = mapperLocations;
}
public void setInterval(int interval) {
this.interval = interval;
}
/**
* @throws Exception
*/
public void refresh() throws Exception {
if (log.isInfoEnabled()) {
log.info("refreshing sqlMapClient.");
}
w.lock();
try {
super.afterPropertiesSet();
} finally {
w.unlock();
}
}
/**
* 싱글톤 멤버로 SqlMapClient 원본 대신 프록시로 설정하도록 오버라이드.
*/
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
setRefreshable();
}
private void setRefreshable() {
proxy = (SqlSessionFactory) Proxy.newProxyInstance(
SqlSessionFactory.class.getClassLoader(),
new Class[]{SqlSessionFactory.class},
new InvocationHandler() {
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
// log.debug("method.getName() : " + method.getName());
return method.invoke(getParentObject(), args);
}
});
task = new TimerTask() {
private Map<Resource, Long> map = new HashMap<Resource, Long>();
public void run() {
if (isModified()) {
try {
refresh();
} catch (Exception e) {
log.error("caught exception", e);
}
}
}
private boolean isModified() {
boolean retVal = false;
if (mapperLocations != null) {
for (int i = 0; i < mapperLocations.length; i++) {
Resource mappingLocation = mapperLocations[i];
retVal |= findModifiedResource(mappingLocation);
}
}
return retVal;
}
private boolean findModifiedResource(Resource resource) {
boolean retVal = false;
List<String> modifiedResources = new ArrayList<String>();
try {
long modified = resource.lastModified();
if (map.containsKey(resource)) {
long lastModified = ((Long) map.get(resource))
.longValue();
if (lastModified != modified) {
map.put(resource, new Long(modified));
modifiedResources.add(resource.getDescription());
retVal = true;
}
} else {
map.put(resource, new Long(modified));
}
} catch (IOException e) {
log.error("caught exception", e);
}
if (retVal) {
if (log.isInfoEnabled()) {
log.info("modified files : " + modifiedResources);
}
}
return retVal;
}
};
timer = new Timer(true);
resetInterval();
}
private Object getParentObject() throws Exception {
r.lock();
try {
return super.getObject();
} finally {
r.unlock();
}
}
public SqlSessionFactory getObject() {
return this.proxy;
}
public Class<? extends SqlSessionFactory> getObjectType() {
return (this.proxy != null ? this.proxy.getClass()
: SqlSessionFactory.class);
}
public boolean isSingleton() {
return true;
}
public void setCheckInterval(int ms) {
interval = ms;
if (timer != null) {
resetInterval();
}
}
private void resetInterval() {
if (running) {
timer.cancel();
running = false;
}
if (interval > 0) {
timer.schedule(task, 0, interval);
running = true;
}
}
public void destroy() throws Exception {
timer.cancel();
}
}


만약에 재로딩 되는 시간을 바꾸고 싶으면 

<bean id="sqlSessionFactory" class="패키지경로.RefreshableSqlSessionFactoryBean" p:mapperLocations="classpath*:패키지경로/**/mapper.xml" :configLocation="classpath:/MapperConfig.xml" p:dataSource-ref="dataSource" p:interval="1000" />

 p:interval="1000" 이부분을 수치를 정해주면된다. ( 디폴트는 500, 단위 ms )


이제 설정을 서버를 시작해서 위에 로케이션 해당하는 mapper.xml ( sql이 있는 xml , 설정에 따라 다름)에서

sql을 바꿔 보자 그리고 클라이언트에서 바뀐지 확인해보자

큰 문제가 없다면 반영될것이라고 생각된다. 


아 단 운영 시스템에 사용은 보장 못합니다~ 개발시에서만 사용하세요~


이 소스는 예전에 인터넷에서 나돌던 RefreshableSqlMapClientFactoryBean 소스를 커스터마이징한 소스인데 문제가 있다면 연락주시길바랍니다



출처: http://sbcoba.tistory.com/16 [홍이의 개발 노트]

Posted by 한설림
|

<script type="text/javascript">

$(function() {

$('#ma-search-toggle').click(function(e) {

e.preventDefault();

var $toggle =  $('div.box > .box-comments');

if ($toggle.is(':visible')) {

$(this).switchClass('fa-chevron-circle-up', 'fa-chevron-circle-down'); //클래스 변경

$('div.box > .box-comments').slideUp();  // 슬라이드 업 [닫힘]

} else {

$(this).switchClass('fa-chevron-circle-down', 'fa-chevron-circle-up'); //클래스 변경

$('div.box > .box-comments').slideDown(); // 슬라이드 업 [열림]

};

});

});

</script>


<i class="fa fa-chevron-circle-up" id="ma-search-toggle" style="cursor: pointer;"></i>


<div class="box-body box-comments" style="padding-bottom: 0">

닫히고 열리고 

</div>

'Programing > JQUERY' 카테고리의 다른 글

SCRIPT 에서 APPEND 한 이벤트 Binding 처리  (0) 2020.03.12
DatePicker 기본 설정  (0) 2017.05.25
Posted by 한설림
|
000000 black 검정
2f4f4f darkslategray 어두운푸른빛회색
708090 slategray 푸른빛회색
778899 lightslategray 밝은푸른빛회색
696969 dimgray 칙칙한회색
808080 gray 회색
a9a9a9 darkgray 어두운회색
c0c0c0 silver 은색
d3d3d3 lightgrey 밝은회색
dcdcdc gainsboro
ffffff white 백색
fff5ee seashell 바다조가비
fffafa snow 설백
f8f8ff ghostwhite 허깨비백색
fffaf0 floralwhite 꽃의백색
f5f5f5 whitesmoke 백색연기
f0f8ff aliceblue 엷은잿빛바탕에푸른빛
f0ffff azure 하늘색
fdf5e6 oldlace 낡은끈색
f5fffa mintcream 박하크림
ffefd5 papayawhip 열대아메리카산과수매질
ffdab9 peachpuff 복숭아빛불기
faf0e6 linen 리넨
eee8aa palegoldenrod 옅은국화과의다년초
ffe4e1 mistyrose 짙은장미빛
ffe4b5 moccasin 사슴가죽의구두
ffdead navajowhite 나바호족백색
d2b48c tan 볕에탄빛깔
f5deb3 wheat 밀
fafad2 lightgoldenrodyellow 밝은국화과다년초노랑
ffffe0 lightyellow 밝은노랑
fff8dc cornsilk 옥수수명주실
faebd7 antiquewhite 옛날의백색
f5f5dc beige 엷은갈색
fffacd lemonchiffon 레몬빛가볍고얇은직물
fffff0 ivory 상앗빛
f0e68c khaki 누른빛에엷은다색이섞인빛깔
e6e6fa lavender 연한자주색
fff0f5 lavenderblush 연한자주빛붉기
ffe4c4 bisque 분홍빛이도는검은빛을띤누른빛
ffebcd blanchedalmond 희어진엷은황갈색
deb887 burlywood 튼튼한목재색
cd853f peru 남미서부의공화국
00ced1 darkturquoise 어두운푸른빛녹색
00bfff deepskyblue 짙은하늘파랑
7fffd4 aquamarine 엷은푸른빛녹색
1e90ff dodgerblue옥수수빵파랑
00ffff cyan 푸른정도
f0fff0 honeydew 식물의잎에서나는단물
87cefa lightskyblue 밝은하늘파랑
afeeee paleturquoise 옅은푸른빛녹색
e0ffff lightcyan 밝은푸른정도
add8e6 lightblue 밝은파랑
b0c4de lightsteelblue 밝은철강빛파랑
40e0d0 turquoise 푸른빛녹색
48d1cc mediumturquoise 중간의푸른빛녹색
00ffff aqua 엷은푸른빛녹색
7b68ee mediumslateblue 중푸른빛회색파랑
191970 midnightblue 깜깜한파랑
6495ed cornflowerblue 옥수수꽃파랑
0000cd mediumblue 중간의파랑
6a5acd slateblue 푸른빛회색파랑
4682b4 steelblue 철강빛파랑
0000ff blue 파랑
483d8b darkslateblue 어두운푸른빛회색파랑
5f9ea0 cadetblue 이하의파랑
87ceeb skyblue 하늘파랑
4169e1 royalblue 황실의파랑
b0e0e6 powderblue 가루파랑
000080 navy 짙은검은빛을띤남빛
00008b darkblue 어두운파랑
8a2be2 blueviolet 파란제비꽃색
8b008b darkmagenta 어두운짙은분홍색
9932cc darkorchid 어두운연보라색
9400d3 darkviolet 어두운제비꽃색
ff00ff magenta 짙은분홍색
ff00ff fuchsia 붉은빛깔이나는자줏빛
c71585 mediumvioletred 중제비꽃빨강
ba55d3 mediumorchid 중간의연보라색
9370db mediumpurple 중간의자줏빛
dc143c crimson 짙게붉은색깔
ff1493 deeppink 짙은연분홍색
ffb6c1 lightpink 밝은연분홍색
ff69b4 hotpink 강렬한연분홍색
ffc0cb pink 연분홍색
dda0dd plum 짙은 보라색
800080 purple 자줏빛
ee82ee violet 제비꽃색
d8bfd8 thistle 엉겅퀴
da70d6 orchid 연보라색
4b0082 indigo 남색
a52a2a brown 갈색
e9967a darksalmon 어두운주황색
f08080 lightcoral 밝은산호빛
cd5c5c indianred 인디언빨강
ffa07a lightsalmon 밝은주황색
db7093 palevioletred 옅은제비꽃빨강
f4a460 sandybrown 엷은갈색
fa8072 salmon 주황색
ff6347 tomato 토마토색
ff4500 ornagered
ff0000 red 빨강
800000 maroon 붉은빛을띤갈색
8b0000 darkred 어두운빨강
b22222 firebrick 내화
d2691e chocolate 갈색
8b4513 saddlebrown 안장갈색
a0522d sienna 붉은빛을띤갈색
bc8f8f rosybrown 장미빛갈색
ff7f50 coral 산호빛
ff8c00 darkorange 어두운붉은빛을띤누른색
ffa500 orange 붉은빛을띤누른색
b8860b darkgoldenrod 어둔운국화과의다년초
ffd700 gold 금빛
ffff00 yellow 노랑
7fff00 chartreuse 연두색
7cfc00 lawngreen 잔디녹색
00ff00 lime 열대산의레몬비슷한과일
32cd32 limegreen 라임녹색
00ff7f springgreen 봄녹색
3cb371 mediumseagreen 중간의바다녹색
adff2f greenyellow 녹색의노랑
8fbc8f darkseagreen 어두운바다녹색
90ee90 lightgreen 밝은녹색
98fb98 palegreen 옅은녹색
2e8b57 seagreen 바다녹색
00fa9a mediumspringgreen 중봄녹색
20b2aa lightseagreen 밝은바다녹색
66cdaa mediumaquamarine 중엷은청록색
228b22 forestgreen 숲녹색
008b8b darkcyan 어두운푸른정도
008080 teal 암록색을띤청색
006400 darkgreen 어두운녹색
556b2f darkolivegreen 어두운올리브녹색
008000 green 초록색
808000 olive 물푸레나뭇과의상록교목
6b8e23 olivedrab 올리브엷은갈색

bdb76b darkkhaki 어두운누른빛에엷은다색


'Programing > HTML' 카테고리의 다른 글

input 자동완성 끄기 HTML  (0) 2019.04.29
Select2 Multiple 구성하기  (0) 2017.12.12
Posted by 한설림
|

SPRING @RestController, @RequestBody, @ResponseBody, ResponseEntity, @PathVariable



@RestController : 

- @RestController 어노테이션은 각 메소드에 @ResponseBody 어노테이션을 추가 할 필요 없이, @Controller와 @ResponseBody의 조합으로 기능한다.

- Spring version 4부터 새로운 @RestController 어노테이션을 사용할 수 있다.



@RequestBody : 

- 메소드 매개 변수에 @RequestBody가 어노테이션 된 경우, Spring은 들어오는 HTTP request body를 해당 매개 변수에 바인드한다.

- 이를 수행하는 동안 Spring은 HTTP Message converter를 사용하여 요청에 있는 ACCEPT 또는 Content-Type 헤더를 기반으로 HTTP request body를 도메인 객체로 변환한다.



@ResponseBody : 

- 메소드가 @ResponseBody로 어노테이션 된 경우, Spring은 반환 값을 나가는 HTTP response body에 바인딩한다.

- 이를 수행하는 동안 Spring은 요청 메시지의 HTTP 헤더에 있는 Content-Type을 기반으로 HTTP Message converter를 사용하여 반환 값을 HTTP response body로 변환한다.



ResponseEntity : 

- 전체 HTTP 응답을 나타낸다. 

- 상태 코드, 헤더 및 body를 지정할 수 있다. 

- HTTP Response에서 보내려는 정보를 전달하는 여러 생성자가 제공된다.



@PathVariable :

- PathVariable 어노테이션은 메소드 매개 변수가 URI 템플릿 변수에 바인드 되어야 함을 나타낸다.



REF

http://websystique.com/spring-boot/spring-boot-rest-api-example/


Posted by 한설림
|