2014-04-20 1 views
2

Java에서 REST 기반 서비스를 구현하고 있지만 각 GET 호출에 대해 JSON에서 전체 엔터티를 반환하고 싶지는 않습니다.Java - REST에서 반환 할 필드 지정

GET>http://mydomain.com/movie/id=1?fields=title,year 
:

은 무엇 내가 지금해야하는 것은 내가 ID로 지정된 영화의 전체 JSON 표현을 얻을 그러나 나는 이런 식으로 뭔가를하고 싶으면 할 수있는 위의 코드와이

@GET 
@Path("movie/{id}") 
@Produces({"application/json"}) 
public Movie find(@PathParam("id") Integer id) { 
    return getEntityManager().find(Movie.class, id); 
} 

입니다

여기에 동영상의 id과 JSON 형식의 응답으로 반환하려는 필드를 전달합니다.

이 작업을 수행하는 간단한 방법이나 alraedy가 수행하는 기존 라이브러리가 있습니까?

는 편집 : 예 AJ 내가 같은 예를 찾아 결국하지만 난 그들이

@ApplicationPath("/") 
    public class SelectableEntityFilteringApplication extends ResourceConfig { 

    public SelectableEntityFilteringApplication() { 
     // Register all resources present under the package. 
     packages("org.glassfish.jersey.examples.entityfiltering.selectable"); 

     // Register entity-filtering selectable feature. 
     register(SelectableEntityFilteringFeature.class); 

     // Configure MOXy Json provider. 
     register(new MoxyJsonConfig().setFormattedOutput(true).resolver()); 

     property(SelectableEntityFilteringFeature.QUERY_PARAM_NAME, "select"); 

    } 

}

필요한 모든 구성을 가진 파일이 그 예에서

를 작동하게 기운 다

하지만 J2EE를 사용하여 내 IDE에서 생성 된 파일은 다음과 같습니다.

@javax.ws.rs.ApplicationPath("webresources") 
public class ApplicationConfig extends Application { 

@Override 
public Set<Class<?>> getClasses() { 
    //register(SelectableEntityFilteringFeature.class); 
    Set<Class<?>> resources = new java.util.HashSet<>(); 
    addRestResourceClasses(resources); 
    return resources; 
} 

클래스를 등록 할 수 없으면 ResourceConfig를 실제로 확장해야합니까? Doesnt는 javax.ws.rs.core.Application과 호환되는 것으로 보입니다.

+0

가장 쉬운 방법은 JSON 라이브러리를 사용하여 직접 응답을 구축하는 것입니다; json 객체 나 문자열을 반환하면 출력을 완전히 제어 할 수 있습니다. – Dave

+0

사실,하지만 많은 REST 서비스를 구축해야 할 것입니다. 또한 엔티티가 너무 많습니다. 모든 항목에 대해 그렇게 할 경우, 생각하지 않아도되는 일을하는 동안 많은 시간을 소비하게됩니다. 쓰다. 나를 위해 무엇이 정말로 anoying하고있다 :) 그러나 최후의 수단으로서 thats 옵션 – Miksel

+0

흠, 당신은 기본적으로 여기 URI 템플릿의 반대를 원한다. .. URI 템플릿으로 당신은 http://mydomain.com/movie/id를 할 수있다. = {id}? fields = {fields}''id'는 스칼라이고'fields'는 배열이지만 URI 템플릿은 _expansion_을 정의하지만 그들은 구문 분석을 정의하지 않습니다 ... (자세한 내용은 RFC 6570 참조) – fge

답변

1

Jersey를 사용하는 경우 아마도 필터링 기능을 사용할 수 있습니다. 다음은 관련 chapter의 문서로 된 링크입니다. Entity Filtering

섹션 19.5는 (는) 귀하의 요구 사항에 맞는 것 같습니다.

참고 : 필자는이 기능을 사용하지 않았습니다 (필터링 기능인 저지를 사용했습니다). Google을 사용하여 찾았습니다. 그래서 어떻게 작동시키는 지에 대한 예제를 제공 할 수는 없습니다.

편집 : 예 : https://github.com/jersey/jersey/tree/master/examples/entity-filtering-selectable

+0

고마워요, 그게 내가 원하는 것, 나는 그것이 작동하는 방법과 내가 캔트에 대한 예를 찾을 것 같다 understant 모르지만, 그것을 시도하고 다시보고합니다. – Miksel

+0

많은 예제가없는 것 같습니다. 나는 하나만 찾을 수있었습니다. 게시물의 편집을 확인하십시오. –

+0

네, 저도 그걸 발견했습니다. 제 편집을 확인하고, 그 예제에 문제가 있습니다. – Miksel