gpt4 book ai didi

java - ExceptionMapper 提供程序不适用于 Jersey

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:00 25 4
gpt4 key购买 nike

我正在使用 Jersey 在 java 中做一个 Web 服务。我对 Jersey 的依赖是:

/* JAX-RS Impl (Jersey) */
compile 'org.glassfish.jersey.inject:jersey-hk2:2.27'
compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.27'
compile 'org.glassfish.jersey.media:jersey-media-sse:2.27'
compile 'org.glassfish.jersey.core:jersey-server:2.27'

//Jackson implementation
compile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.27'

// Hateoas
compile 'org.glassfish.jersey.ext:jersey-declarative-linking:2.27'

//Jersey Impl test
compile 'org.glassfish.jersey.test-framework:jersey-test-framework-core:2.27'

compileOnly 'javax.servlet:javax.servlet-api:4.0.1'

我的类异常看起来像下一个片段,我正在捕获所有 Throwable 来测试它的工作原理。

package com.apporelbotna.appuestas.rest.exception;

import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class WebserviceExceptionMapper implements ExceptionMapper<Throwable>
{
public WebserviceExceptionMapper()
{
System.out.println("I'm getting created!!! - WebserviceExceptionMapper");
}

public Response toResponse(Throwable ex)
{
return Response.status(404).build();
}
}

我的其余端点看起来像:

@GET
public Response getUsers() throws Exception
{
throw new Exception("Hi i'm crashing!");
}

我阅读了 Jersey 的文档,我明白我可以在类中使用 @provider 注册异常映射器。但应用程序无法识别该类。我尝试在 ResourceConfig 类中注册我的类。这确实有效。

@Provider
@javax.ws.rs.ApplicationPath("webservice")
public class RestResourceConfig extends ResourceConfig
{
@Context
public void setServletContext(ServletContext context)
{
if (context != null)
{
context.getInitParameter("system.info.allow");
}
}

public RestResourceConfig()
{
// Register components in a package
register(WebserviceExceptionMapper.class);
packages("com.apporelbotna.appuestas.rest.endpoint");
}
}

我缺少什么?

最佳答案

packages("com.apporelbotna.appuestas.rest.endpoint") 这告诉 Jersey 哪个包要扫描 @Provider@Path 类并注册它们。您可以列出多个包,也可以只使用像 com.apporelbotna.appuestas 这样的基本包,Jersey 会递归扫描该包。

因此,如果您希望自动注册 ExceptionMapper,请执行以下操作之一

packages("com.apporelbotna.appuestas.rest.endpoint",
"com.apporelbotna.appuestas.rest.exception");
// -or-
packages("com.apporelbotna.appuestas.rest");

关于java - ExceptionMapper 提供程序不适用于 Jersey ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53050115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com