2016-08-09 1 views
1

내 서비스 중 하나에 대해 Jersey 서비스 클라이언트에서 작업 중이며 클라이언트의 put을 통해 null 엔티티를 전달하는 가장 좋은 방법을 결정하는 데 문제가 있습니다. null put 메소드가있는 저지 클라이언트

@PUT 
    @Path("/rule/disable/key/{key}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response disableRuleByKey(@PathParam("key") String key) 
     throws Exception { 
    try { 
     DAL.getWriter().disableRuleByKey(key); 
     return Response.ok().build(); 
    } catch (BlahException bla) { 
     throw de; 
    } 

는 기본적으로 모든 방법은 백엔드에서 사용하는 응용 프로그램의 다른 부분에 대한 토글 플립입니다 않습니다 사물의 서비스 측면에서이 내 엔드 포인트입니다. 나는 put이 여기에 쓸 올바른 호출인지 확신하지 못합니다. (하지만 이것은 팀 동료가 작성했습니다). JSON 페이로드조차 없다는 것을 알고 있습니다.

어쨌든, 클라이언트 측에서 나는 extends를 통해 이용할 수 있도록 모든 클라이언트에 대해이 일반적인 putItem() 코드가하십시오 JSON 페이로드를 사용하여 데이터베이스 벌금에

public static <T> boolean putItem(Client client, String uri, T item) 
     throws InterruptedException, 
     ExecutionException { 
    Invocation putConfig = client.target(uri).request() 
     .buildPut(Entity.entity(item, MediaType.APPLICATION_JSON)); 
    Future<Response> asyncResponse = putConfig.submit(); 
    Response response = asyncResponse.get(); 

    return response.getStatus() == Status.OK.getStatusCode(); 
    } 

PUT의, 그러나 위의 방법부터 특별히 페이로드를 가지고 있지 않은데 나는 최선의 행동이 무엇인지 궁금해하고있었습니다. 호출의 .buildPut()을 수정하면 null이 페이로드를 전달하지 않기 때문에 괜찮은가요?

나는 엔드 포인트를 수정하는 것에 대해서도 개방적이지만 이것은 현재 가지고있는 것이므로이 값을 백엔드에 보내는 가장 좋은 방법을 알 수 없다. 키를 @PathParam으로 전달하는 대신 JSON 객체를 사용하도록 엔드 포인트를 수정해야합니까?

답변

1

리소스 상태를 PUT 요청으로 바꾸려면 요청 페이로드에 새 표현을 보내야합니다.

되세요 HTTP에서 상기 RFC 7231, 의미론에 대한 현재 기준 및 컨텐츠/1.1을 보면 :

4.3.4. PUT

대상 자원의 상태를 작성하거나 교체 할 것을 PUT있어서 요청 요청 메시지 페이로드에 포함 된 표현에 의해 정의 된 상태로. [...]

+0

차갑다. 그렇다면 엔드 포인트가'@PathParam (String key)'를 엄격하게 사용하는 대신'disableRuleByKey (String key)'와 그에 상응하는 JSON 페이로드 만 있으면됩니까? – erp

+0

@erp 예. URL을 사용하여 자원 및 서버에 자원의 새 표현을 보내는 요청의 페이로드를 찾으십시오. –