Programming
-
jquery ajax method 정리2014.03.12
-
[Spring] Spring AOP를 이용한 메서드 추적2014.02.13
-
[C#] short url 생성(bit.ly)2014.02.13
-
[C#] HttpWebRequest Class 활용한 Post 전송2014.02.13
spring mvc @ResponseBody, @RequestBody json + ajax
spring기반 json + ajax 처리
mappingJacksonHttpMessageConverter는 @ResponseBody, @RequestBody 어노테이션 사용시 JSON String을 javaClass(get, set)에 자동으로 맵핑이 되도록 변환을 해주는 스프링 애너테이션입니다.
우선 MappingJacksonHttpMessageConverter 관련 bean 설정이 필요합니다.
-board-servlet.xml
<bean id=jacksonMessageConverter class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter ">
</bean>
<bean class=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter>
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter" />
</list>
</property>
</bean>
@RequestBody는 클라이언트에서 jsonObject로 전송되는 파라미터를 자동으로 javaClass 형식으로 변환한다. (UserBean Class 는 클라이언트에서 받을 파라미터를 get, set 으로 작성하면, bean에 등록된 massageConverters에서 자동으로 javaClass 형식에 맞게 컨버팅이 이뤄진다.)
@ResponseBody는 클라이언요청을 서버에서 처리 후 메소드가 리턴하는 오브젝트를 messageConverters를 통해 json 형태로 변환하여 리턴해주는 역활을 한다.
-UserController.java
@RequestMapping(value="getLoginCheck.ajax", method=RequestMethod.POST)
public @ResponseBody UserBean loginCheck(@RequestBody UserBean userBean){
logger.info("userBeanD.getJ_username(){}", userBean.getJ_username());
userBean = userService.getUsers(userBean.getJ_username());
return userBean;
}
ajax 통신을 위해 jquery ajax method 설정을 아래와 같이 jQuery로 선언해준다.
var _param = {j_username:$("#j_username").val(), j_password:$("#j_password").val()};
_data = JSON2.stringify(_param); //jsonString으로 변환
_url = "localhost:8080/login/getLoginCheck.ajax";
-common.js
$.ajax({
type : 'POST',
url : _url,
cache: false,
dataType: "json",
data: _data,
processData: false,
contentType: "application/json;
charset=utf-8",
success : function(data, status){
console.log("status:"+status+","+"data:"+data);
alert(data.nm);
},
error: function(request, status, error){
//alert("loading error:" + request.status);
console.log("code : " + request.statusText + "\r\nmessage : " + request.responseText);
}
});
'Programming > Spring' 카테고리의 다른 글
[오류] org.springframework.jdbc.datasource.DataSourceTransactionManager 빈 생성 에러 (0) | 2014.05.13 |
---|---|
[오류] java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet (0) | 2014.04.28 |
[Spring] Spring AOP를 이용한 메서드 추적 (0) | 2014.02.13 |
spring social (0) | 2014.02.12 |
spring mvc 모델 생성 (0) | 2014.02.11 |
jquery ajax method 정리
$.ajax({ type: 'POST', url: _url, cache: false, dataType: "json", data: _data, processData: true, contentType: "application/json; charset=utf-8", success: function(data, status){ }, error: function(request, status, error){ } });
Name |
Value/Description |
파라메터는 한 개 이상의 name/value 쌍으로 표시 |
async |
Boolean 값 |
요청이 비동기식으로 처리되는지 여부를 나타냄 기본값은 true |
beforeSend(xhr) |
|
요청을 보내기 전에 실행되는 함수 |
cache |
Boolean 값 |
브라우저가 요청된 페이지를 캐싱해야 하는지 여부를 나타냄 |
complete(xhr,status) | 요청이 완료됐을 때 실행되는 함수 | |
contentType | 서버로 보내지는 데이터의 content-type 기본값은 “application/x-www-form-urlencoded" | |
dataFilter(data,type) | XMLHttpRequest의 응답 데이터를 처리할 때 사용되는 함수 | |
dataType | 서버 응답으로 받는 데이터 타입 | |
error(xhr,status,error) | 요청이 실패했을 때 실행되는 함수 | |
global | Boolean 값 | 요청에 대해 전역 AJAX 이벤트를 실행할 지 여부를 명시함 |
jsonp | jsonp 요청에서 callback 함수를 오버라이딩하는 문자열 | |
jsonpCallback | jsonp 요청에서 callback 함수 이름을 나타냄password | |
password | HTTP 접근 인증(access authentication) 요청에 사용할 password를 나타냄 | |
processData | Boolean 값 | 요청으로 보낸 데이터를 query string 형태로 변환할지 여부를 나타냄 기본값은 true |
scriptCharset | 요청할 때의 charset을 나타냄 | |
success(result,status,xhr) | 요청이 성공했을 때 수행되는 함수 | |
timeout | 요청에 대해 로컬의 응답제한시간(timeout)을 밀리초로 나타냄 | |
traditional | Boolean 값 | 파라미터 직렬화를 기존 방식으로 사용할 지 여부를 나타냄 |
type | 요청 type(GET 혹은 POST)을 명시함 | |
url | 요청을 보낼 URL을 나타냄 기본값은 현재페이지 | |
xhr | XMLHttpRequest 오브젝트를 생성할 때 사용하는 함수 |
'Programming > Frontend' 카테고리의 다른 글
[jQuery] each break/continue (0) | 2015.01.22 |
---|---|
[jQuery] loadingbar plugin (0) | 2014.09.19 |
jQuery multi redio button valid check (0) | 2014.02.13 |
[ajax] JSONP CROSS SITE 응답 받기 (0) | 2014.02.12 |
jQuery에서 부모창 제어/접근(opener, parent) (0) | 2014.02.11 |
[Spring] Spring AOP를 이용한 메서드 추적
Spring AOP 메서드 추적 Flow
Spring AOP를 활용한 메소드 흐름을 로깅한 로직을 정리합니다.
<!-- spring aspect -->
<bean id="loggingAspect" class="com.zz.framework.support.aspect.LoggingAspect" />
<aop:config proxy-target-class="true">
<aop:aspect id="aspectLoggging" ref="loggingAspect">
<aop:pointcut id="servicePointcut" expression="execution(* *..*.service.*Service*.*(..))" />
<aop:around method="logAround" pointcut-ref="servicePointcut" />
</aop:aspect>
</aop:config>
public class LoggingAspect {
private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);
public void logBefore(JoinPoint joinPoint) {
logger.debug("logBefore()");
}
public void logAfter(JoinPoint joinPoint) {
logger.debug("logAfter()");
}
/**
* 메소드 별 로그 앞뒤로 남기기
* @param joinPoint
* @return
* @throws Throwable
* @auther jp1020 2014. 1. 15.
*/
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
Object thisObj = joinPoint.getTarget();
String className = thisObj.getClass().getName();
Object[] args = joinPoint.getArgs();
long currentTime = System.currentTimeMillis();
if(logger.isDebugEnabled()) {
logger.debug("=================================================");
logger.debug(">>>>>>>>> LOGGING START >>>>>>>>>>");
logger.debug("[class]:" + className);
logger.debug("[method]:" + joinPoint.getSignature().getName() + "()");
}
Object returnObj = joinPoint.proceed();
if(logger.isDebugEnabled()) {
logger.debug("[class]:" + className);
logger.debug("[method]:" + joinPoint.getSignature().getName() + "()");
logger.debug("[소요시간]: {}ms", new Object[]{(System.currentTimeMillis()-currentTime)});
logger.debug(">>>>>>>>>> LOGGING END >>>>>>>>>>");
logger.debug("=================================================");
}
return returnObj;
}
}
페이지 호출시 Console창에 출력된 로그를 확인 합니다.
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():46]:=================================================
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():47]:>>>>>>>> LOGGING START >>>>>>>
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():48]:[class]:com.zz.board.business.board.service.impl.BoardServiceImpl
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():49]:[method]:listBoard()
[2014-02-13 17:52:23] DEBUG [AbstractBeanFactory.doGetBean():246]:Returning cached instance of singleton bean 'loggingAspect'
내용생략.........
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():55]:[class]:com.zz.board.business.board.service.impl.BoardServiceImpl
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():56]:[method]:listBoard()
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():57]:[소요시간]: 281ms
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():58]:>>>>>>>> LOGGING END >>>>>>>>
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():59]:=================================================
'Programming > Spring' 카테고리의 다른 글
[오류] java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet (0) | 2014.04.28 |
---|---|
spring mvc @ResponseBody, @RequestBody json + ajax (2) | 2014.03.12 |
spring social (0) | 2014.02.12 |
spring mvc 모델 생성 (0) | 2014.02.11 |
[Spring] Environment와 @PropertySource (0) | 2014.02.05 |
[C#] short url 생성(bit.ly)
- C# bit.ly API 연동 방법
SNS를 연동하다 보면 url에 파라미터가 길게 늘어진 url이 보기 거슬릴때가 있다.
다만, 일별 쿼터 제한이 있어 동적으로 사용할 경우 제한 횟수 이상의 요청은 원본 URL로 처리가 됨.
사용한 방식은 클라이언트에서 ajax로 bit.ly api를 호출하고 리턴 받은 short url이 쉐어되도록 개발을 진행.. 우선 개발을 하려면 bit.ly 사이트에서 계정을 발급 받아야 함.
자바스크립트로 short url 생성 방식
<script>
function facebook_sharer(sharer_title, content_title, sharer_URL) {
sharer_URL = fn_bitly(sharer_URL);
var sharer_str = encodeURIComponent(sharer_title.replace(/#/gi, "") + content_title);
var sharer_url = encodeURIComponent(sharer_URL);
window.open("http://www.facebook.com/sharer.php?u=" + sharer_url + "&t=" + sharer_str, "facebook_sharer", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=800,height=600");
}
function url_sharer(sharer_URL) {
sharer_URL = fn_bitly(sharer_URL);
bResult = window.clipboardData.setData("Text", sharer_URL);
if (bResult) alert('복사되었습니다. 블로그에서 붙여넣기(Ctrl+V)를 이용하세요.');
}
//Short Url Maker
function fn_bitly(longUrl) {
var shortUrl = "";
if (longUrl != "") {
$J.ajax({
url: '/ajax/bitlyToJson.aspx', //bit.ly api로 다이렉트로 호출해서 short url을 받아도 무방.
type: 'POST',
dataType: 'json',
data: {
longUrl: longUrl
},
timeout: 1000,
async: false,
error: function(xhr) {
//alert('xhr (' + xhr.status + ':'+ xhr.statusText + ':' + xhr.responseText + ')');
},
success: function(response) {
_jsonObject = response.data;
shortUrl = _jsonObject.url;
}
});
if (shortUrl == "") shortUrl = longUrl;
}
return shortUrl;
}
</script>
-bitlyToJson.csc# 에서 short url 생성 방식
/******************************************************************************
* 제 목 : bitlyToJson
* 작성자 : 이종필
* 작성일 : 2012-11-08
* 설 명 : Long Url -> Short Url로 Json 리턴
******************************************************************************/
#region shortUrl 생성
/// /// https://bitly.com/ 사이트에서 발급
/// format : json
/// apiKey : R_b7b8ddaf4734eba87237d5ad*******
/// login : leejon****
///
private void MakeShorURL(string longurl)
{
StringBuilder sb = new StringBuilder();
//base
sb.Append(@"http://api.bit.ly/v3/shorten?login=leejon****l&apiKey=R_b7b8ddaf4734eba87237d5ad5*****&format=json&longUrl=");
//server page
sb.Append(Server.UrlEncode(longurl));
// Make Short URL
WebClient client = new WebClient();
string shorturl = client.DownloadString(new Uri(sb.ToString()));
Response.Write(shorturl);
}
#endregion
결과는 아래와 같이 JSON, XML 데이타로 리턴된다. <response>
<status_code>200</status_code>
<status_txt>OK</status_txt>
<data>
<url>http://bit.ly/YNBfGD</url>
<hash>YNBfGD</hash>
<global_hash>md7fw</global_hash>
<long_url>http://www.naver.com/</long_url>
<new_hash>0</new_hash>
</data>
</response>
'Programming > C#' 카테고리의 다른 글
[C#] HttpWebRequest Class 활용한 Post 전송 (0) | 2014.02.13 |
---|---|
[C#] Win7 x64 IIS에서 32bit 응용 프로그램 사용 (0) | 2014.02.13 |
[C#] 중첩 리피터(Nested Repeater) 부모값 호출 하기 (0) | 2014.02.13 |
[C#] Generic 이란. (0) | 2014.01.07 |
[C#] HttpWebRequest Class 활용한 Post 전송
C#에서 http 프로토콜을 이용한 인터페이스.
protected void HttpCall()
{
String callUrl = "http://localhost:8080/test/call";
String[] data = new String[1];
data[0] = "nikemodel"; // id
data[1] = "password"; // pw
String postData = String.Format("id=&pw=", data[0], data[1]);
HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create(callUrl);
//인코딩 UTF-8
byte[] sendData = UTF8Encoding.UTF8.GetBytes(postData);
httpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
httpWebRequest.Method = "POST";
httpWebRequest.ContentLength = sendData.Length;
Stream requestStream = httpWebRequest.GetRequestStream();
requestStream.Write(sendData, 0, sendData.Length);
requestStream.Close();
HttpWebResponse httpWebResponse = (HttpWebResponse) httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
String response = streamReader.ReadToEnd();
streamReader.Close();
httpWebResponse.Close();
console.Write("response : " + response);
}
'Programming > C#' 카테고리의 다른 글
[C#] short url 생성(bit.ly) (0) | 2014.02.13 |
---|---|
[C#] Win7 x64 IIS에서 32bit 응용 프로그램 사용 (0) | 2014.02.13 |
[C#] 중첩 리피터(Nested Repeater) 부모값 호출 하기 (0) | 2014.02.13 |
[C#] Generic 이란. (0) | 2014.01.07 |