Java 405不允许的方法在RestEasy中以Http状态500出现

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

目前正在使用RestEasy框架开发Restful服务

处理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();
                }
        }