Angularjs and Restful with Jersey :: how to pass parameters
AngularJs 와 Restful 이 만나서 상당히 powerful 한 기능들을 선보이고 기존에 갖고 있던 불편한 것들을 간단히 정리해주는 Framework라고 인정해 줄수 밖에 없다. 하지만 이를 정확히 이해하고 쓰기까지에는 많은 시행 착오도 겪어야 하겠지만 한번 알고 나면 이 가지의 기능들이 나와 같은 프로그래머들을 상당히 편하고 강력한 웹어플리케이션을 만들수 밖에 없을 것 같다.
아래에는 현재 많은 웹페이지에서 쓰이고 있는 get 방식에서parameter들을 보내주는 방식을 아주 깨끗이 정리해주는 예를 들어 보겠다.
1. ProviderResource.java :: 전달되는 parameter는 { } 안에 넣어지고 type 을 정해준다. 주어지는 path에 대해서도 주의 하여야 한다.
@Path(“/provider”)
public class ProviderResource {
ProviderDAO dao = new ProviderDAO();
@GET @Path(“search/{query}”)
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<Provider> findByContainer(@PathParam(“query”) int query) {
return dao.findByContainer(query);
}
2. service.js : 리소스 서비스 즉 Provider 에 대하여 정리해준다. 다른 자바스크립트에서는 query 로 불려진다.
angular.module(‘services.provider’, [‘ngResource’]).
factory(‘Provider’, function($resource){
return $resource(‘api/provider/search/:containerId’, {}, {
query: {method:’GET’, params:{providerId:’providers’}, isArray:true}
});
});
3. controllers.js : REST 서비스 콜을 간단히 서비스콜로 하면서 parameter 도 함께 보내준다. 보기만해도 간단하고 이해가 쉽다.
$scope.providers = Provider.query({containerId:$rootScope.containerId});
4. multiple parameters 의 경우는 아래와 같다.
– 밑에는 Resource 자바 파일의 예 : 패쓰에 @Path(“search/{query1}/{query2}”) 그리고 method argument에는 @PathParam(“query1”) int query1, @PathParam(“query2”) int query2)
@GET @Path(“search/{query1}/{query2}”)
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public List<Reservation> findByContainer(@PathParam(“query1”) int query1, @PathParam(“query2”) int query2) {
return dao.findAllByContainerAndDate(query1,query2);
}
– service.js 에는
angular.module(‘services.reservation’, [‘ngResource’]).
factory(‘Reservation’, function($resource){
return $resource(‘api/reservation/search/:containerId/:targetDay’, {}, {
query: {method:’GET’, params:{reservationId:’reservations’}, isArray:true}
});
});
– 마지막으로 controller.js 에서는 간단히
$scope.reservations = Reservation.query({containerId:$rootScope.containerId,targetDay:$rootScope.currentTargetDay});