배열 파라미터 처리
QuickStart
- 배열 파라미터는 프론트엔드에서부터 배열로 전달합니다.
- comma separated string은 사용하지 않습니다.
- IN 쿼리는 배열 파라미터를
IEnumerable
타입으로 전달한 뒤ToInQueryParam()
를 사용해 만듭니다.
배열 파라미터 생성 후 웹 요청
여러 개의 숫자 또는 문자 데이터는 Array
타입으로 전달합니다. (ex - 주문번호, 아이디)
데이터들을 콤마 또는 다른 구분자로 연결해 string으로 전달하는 방법(comma separated string)은 사용하지 않습니다.
// good
var ids = [1111111,2222222,3333333];
// bad
var ids = "1111111,2222222,3333333";
$.post(url, { ids : ids }, function (data) {
if (data.result == "success") {
location.reload();
} else {
alert(data.message);
}
});
컨트롤러 바인딩
컨트롤러 파라미터 IEnumerable
타입으로 바인딩 (ex - IEnumerable<int>
)
IList<int>
, IList<string>
대신 IEnumerable<int>
, IEnumerable<string>
을 사용합니다.
public JsonResult ArrayParam(IEnumerable<int> ids)
{
/* ... */
}
배열 파라미터로 IN 쿼리 만들기
Service
public class ArrayParamService : IArrayParamService
{
[Autowire]
public IArrayParamDao ArrayParamDao { get; set; }
public IList<ArrayParamItem> FindByIds(IEnumerable<int> ids)
{
return ArrayParamDao.FindByIds(ids);
}
}
DAO
확장함수 ToInQueryParam()
으로 IN 쿼리를 만듭니다.
SQL Injection 공격을 방지하기 위함입니다.
public class ArrayParamDao : ObjectDao<ArrayParamItem>, IArrayParamDao
{
public IList<ArrayParamItem> FindByIds(IEnumerable<int> ids)
{
return Query(new ListQuery<ArrayParamItem>
{
Query = $@"SELECT * FROM ArrayParam WITH(NOLOCK) WHERE Id IN ({ids.ToInQueryParam()})"
});
}
}