Java 405不允许的方法在RestEasy中以Http状态500出现
目前正在使用RestEasy框架开发Restful服务 处理405时遇到问题-Java 405不允许的方法在RestEasy中以Http状态500出现,java,resteasy,Java,Resteasy,目前正在使用RestEasy框架开发Restful服务 处理405时遇到问题-javax.ws.rs.NotAllowedException:RESTEASY003650:找不到POST的资源方法,返回405并带有Allow头。 已经使用exceptionapper为NotAllowedException编写了一个ErrorHandler,并在扩展javax.ws.rs.core.application的根应用程序中注册了提供程序 但它仍然返回500错误,并将Http状态设置为500而不是405
javax.ws.rs.NotAllowedException:RESTEASY003650:找不到POST的资源方法,返回405并带有Allow头。
已经使用exceptionapper
为NotAllowedException
编写了一个ErrorHandler,并在扩展javax.ws.rs.core.application
的根应用程序中注册了提供程序
但它仍然返回500错误,并将Http状态设置为500而不是405。而为400和404编写的其他处理程序工作正常
使用RestEasy的最新版本:3.0.16.Final
下面是NotAllowedExceptionHandler
的代码,并在应用程序中注册相同的代码
@Provider
public class NotAllowedExceptionHandler implements ExceptionMapper <NotAllowedException>
{
@Override
public Response toResponse( NotAllowedException exception )
{
String bodyOfResponse = exception.getMessage();
APIResponse response = new APIResponse( false , null , Status.METHOD_NOT_ALLOWED , HttpServletResponse.SC_METHOD_NOT_ALLOWED ,
bodyOfResponse );
return Response.status( response.getStatus() ).entity( response ).build();
}
}
public class RootApplication extends Application
{
@Override
public Set <Class <?>> getClasses()
{
Set <Class <?>> classes = new HashSet <Class <?>>();
/* Specify resource classes to be loaded */
classes.add( ErrorResource.class );
/* Specify exception handler classes to be loaded */
classes.add( ResourceGoneExceptionHandler.class );
classes.add( RequestTooLargeExceptionHandler.class );
classes.add( SearchExceptionHandler.class );
classes.add( ServiceUnavailableExceptionHandler.class );
classes.add( UnauthorizedExceptionHandler.class );
classes.add( EntityNotFoundExceptionHandler.class );
classes.add( JDOObjectNotFoundExceptionHandler.class );
classes.add( NucleusObjectNotFoundExceptionHandler.class );
classes.add( ResourceNotFoundExceptionHandler.class );
classes.add( APIExceptionHandler.class );
classes.add( ParseExceptionHandler.class );
classes.add( InternalServerErrorExceptionHandler.class );
classes.add( IllegalArgumentExceptionHandler.class );
classes.add( JDOFatalUserExceptionHandler.class );
classes.add( JDOUserExceptionHandler.class );
classes.add( FatalN`enter code here`ucleusUserExceptionHandler.class );
classes.add( IOExceptionHandler.class );
classes.add( UnrecognizedPropertyExceptionHandler.class );
classes.add( NotAllowedExceptionHandler.class);
classes.add( NotSupportedExceptionHandler.class);
/* Specify filter classes to be loaded */
classes.add( RequestFilter.class );
return classes;
}
}
请在这方面给予帮助
提前感谢。RestEasy不知道如何处理
APIResponse
。将类型添加到NotAllowedExceptionHandler的响应
。要响应
方法以解决问题,请执行以下操作:
Response.status( response.getStatus() ).entity( response ).type(MediaType.<type>).build();
完整方法:
@Provider
public class NotAllowedExceptionHandler implements ExceptionMapper <NotAllowedException>
{
@Override
public Response toResponse( NotAllowedException exception )
{
String bodyOfResponse = exception.getMessage();
APIResponse response = new APIResponse( false , null , Status.METHOD_NOT_ALLOWED , HttpServletResponse.SC_METHOD_NOT_ALLOWED ,
bodyOfResponse );
return Response.status( response.getStatus() ).entity( response ).type(MediaType.APPLICATION_JSON).build();
}
}
@Provider
公共类NotAllowedExceptionHandler实现ExceptionMapper
{
@凌驾
公众响应(不允许例外)
{
字符串bodyOfResponse=exception.getMessage();
APIResponse response=新的APIResponse(false,null,Status.METHOD\u不允许,HttpServletResponse.SC\u METHOD\u不允许,
响应体);
返回Response.status(Response.getStatus()).entity(Response).type(MediaType.APPLICATION_JSON).build();
}
}
您能否发布“com.adaptevant.distributedsource.objects.APIResponse”的源代码。如果您提到的某个处理程序的源代码确实有效,并且它们使用的响应对象不是APIResponse
,那么这也会很有帮助。本质上,来自RestEasy的错误消息是,它不知道如何处理您给它的APIResponse
对象。
Response.status( response.getStatus() ).entity( response ).type(MediaType.APPLICATION_JSON).build();
@Provider
public class NotAllowedExceptionHandler implements ExceptionMapper <NotAllowedException>
{
@Override
public Response toResponse( NotAllowedException exception )
{
String bodyOfResponse = exception.getMessage();
APIResponse response = new APIResponse( false , null , Status.METHOD_NOT_ALLOWED , HttpServletResponse.SC_METHOD_NOT_ALLOWED ,
bodyOfResponse );
return Response.status( response.getStatus() ).entity( response ).type(MediaType.APPLICATION_JSON).build();
}
}