2012-07-03 2 views
0

I가 "사용자"리소스를 리디렉션 따르지 않는 다음과 같은 예외 :저지 클라이언트는 정의

SEVERE : 자바 클래스 com.colabo.model.User, 및 Java 유형 클래스 com.colabo.model.Use에 대한 메시지 본문 리더 r 및 MIME 미디어 유형 text/html; 캐릭터 세트 = ISO-8859-1이 발견

그리고 이것은 HTTP 요청을 추적하지되었습니다

1 * Client out-bound request 
1 > POST http://localhost:8080/api/users 
1 > Accept: application/json 
1 > Content-Type: application/json 
{"id":null,"email":"test","password":"test"} 
1 * Client in-bound response 
1 < 201 
1 < Date: Tue, 03 Jul 2012 06:12:38 GMT 
1 < Content-Length: 0 
1 < Location: /api/users/4ff28d5666d75365de4515af 
1 < Content-Type: text/html; charset=iso-8859-1 
1 < 

한다 저지 클라이언트가 제대로 비 정렬 화,이 경우 자동으로 리디렉션 및 JSON 반환 팔로우 두 번째 요청의 개체?

덕분에, 마이클

+0

리디렉션 코드 (3xx)가 표시되지 않지만 만든 (201)은 아닙니다. 클라이언트는 어떻게 리디렉션됩니까? 또한 @ Posts 메서드 –

+0

@ EugenioCuevas에 @Produces를 추가해야하지만 응답에 "Location"헤더가 포함되어 있다고 생각하십니까? 나는 Produces annotation을 추가하려고했지만 이것 역시 도움이되지 못했다. – spektom

답변

1

팔로우 수단이 30x 상태 코드 리디렉션 다음 리디렉션합니다. 응답 내용이 201인데 리디렉션이 아닙니다. 201을 반환하면 위치 헤더 뒤에 오는 ClientFilter을 작성할 수 있습니다. 저도 같은 문제에 직면하고 클라이언트 필터에 따라이를 해결 된

+1

리디렉션을 따르는 ClientFilter를 만드는 방법에 대한 지침이 있습니까? (2.5 클라이언트를 사용 중입니다.) – devlearn

1

당신이

Client client = ClientBuilder.newClient(); 

로 클라이언트를 작성하는 경우 다른 클래스에있는 동안

package YourPackageName; 


import javax.ws.rs.client.ClientRequestContext; 
import javax.ws.rs.client.ClientResponseContext; 
import javax.ws.rs.client.ClientResponseFilter; 
import javax.ws.rs.core.Response; 
import java.io.IOException; 
import java.io.InputStream; 

public class RedirectFilterWorkAround implements ClientResponseFilter { 
    @Override 
    public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { 
     if (responseContext.getStatusInfo().getFamily() != Response.Status.Family.REDIRECTION) 
      return; 

     Response resp = requestContext.getClient().target(responseContext.getLocation()).request().method(requestContext.getMethod()); 

     responseContext.setEntityStream((InputStream) resp.getEntity()); 
     responseContext.setStatusInfo(resp.getStatusInfo()); 
     responseContext.setStatus(resp.getStatus()); 
    } 
} 

지금

으로이 필터 클래스를 적용
client.register(RedirectFilterWorkAround.class); 

Jersey 2.x와 (과) 호환됩니다. 발견되었습니다. SO에 대한 이러한 포인터는 다음과 같습니다. p

+0

이 기능이 작동합니까? OP (POST 대신 PUT 사용)와 동일한 문제에 직면하고 있습니다.이 필터는 'Entity가 http 메서드 PUT에 대해 null이 아니어야합니다.'오류를 생성합니다. requestContext에서 다음 요청으로 엔티티를 전달하려고했습니다. 'resp = requestContext.getClient.target (responseContext.getLocation()). request(). put (entity)'하지만 문제도있었습니다. – bkaiser

+0

http GET에서 예외없이 작동했습니다. –