2011-12-21 4 views
2

RESTEasy 및 JBOSS 5.1로 응용 프로그램을 개발하고 있습니다.HTTP 상태 코드 500 for NotFoundException

특정 상황에서는 404 오류 (찾을 수 없음)를 반환해야합니다. 500 내부 서버 오류

도 몸 예외의 경우 : 내가

import org.jboss.resteasy.spi.NotFoundException; 
throw new NotFoundException(...); 

문제를 사용하고 소스에서

헤더 응답, 내가 상태 코드를 가지고 있다는 것입니다 is :

org.jboss.resteasy.spi.UnhandledException: org.jboss.resteasy.spi.NotFoundException 

이것은 정상적인 동작입니까? 상태 코드를 반환 할 수 없습니다 : 404?

+0

마지막으로, 구성/종속성 문제 일뿐입니다. 이제는 정상적으로 작동합니다 (그래서 NotFoundException을 던질 수 있습니다). – ovi2ut

답변

2

. 근본 원인을 찾았습니다. 내장 된 예외 핸들은 resteasy 최신 버전 빌드 2.3.1 GA에서만 발생합니다. 이 버전으로 업그레이드하면 기대 한 결과를 얻을 수 있습니다.

1

내가 대신 예외를 던지는 사용해야한다고 생각 : 당신의 휴식 방법에

import javax.ws.rs.core.Response; 
return Response.status(404).build(); 

당신이 발견되지 반환해야 할 때.

안부.

+0

이미 기존 코드를 사용하고 있습니다. 응답 유형을 수정할 수 없습니다 (응답을 반환 할 수 없음). 나는 이것을 DELETE에 사용하고 있지만 반환 유형이 다른 유형의 객체 인 GET에는 사용할 수 없습니다. – ovi2ut

0

아마도 사용자 정의 javax.servlet.Filter가 도움이 될 수 있습니다.

2

RestEASY가 NotFoundException을 처리하지 못하는 것이 이상하게 보입니다. according to the docs:

Resteasy에는 디스패치 또는 마샬링 중에 오류가 발생하면 throw되는 기본 제공 예외 집합이 있습니다.

어쨌든, 당신은 ExceptionMapper를 추가하여 해결할 수 있습니다 : 나는 몇 가지 문제가 발생

import org.jboss.resteasy.core.Dispatcher; 
import org.jboss.resteasy.mock.MockDispatcherFactory; 
import org.jboss.resteasy.mock.MockHttpRequest; 
import org.jboss.resteasy.mock.MockHttpResponse; 
import org.jboss.resteasy.spi.NotFoundException; 
import org.junit.Assert; 
import org.junit.Test; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.ext.ExceptionMapper; 

public class ExceptionTest { 

    @Path("/") 
    public static class Service { 
     @GET 
     public String notFound() throws NotFoundException { 
      throw new NotFoundException(""); 
     } 
    } 

    public static class FailureExceptionMapper implements ExceptionMapper<NotFoundException> { 

     @Override 
     public Response toResponse(NotFoundException exception) { 
      return Response.status(exception.getErrorCode()).build(); 
     } 
    } 

    @Test 
    public void test() throws Exception { 
     Dispatcher dispatcher = MockDispatcherFactory.createDispatcher(); 
     dispatcher.getProviderFactory().addExceptionMapper(new FailureExceptionMapper()); 
     dispatcher.getRegistry().addSingletonResource(new Service()); 


     MockHttpRequest request = MockHttpRequest.get("/"); 
     MockHttpResponse response = new MockHttpResponse(); 

     dispatcher.invoke(request, response); 

     Assert.assertEquals(404, response.getStatus()); 


    } 
}