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});

댓글 남기기