Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 泽西例外服装不';t映射异常_Spring_Web Services_Rest_Jersey_Spring Boot - Fatal编程技术网

Spring 泽西例外服装不';t映射异常

Spring 泽西例外服装不';t映射异常,spring,web-services,rest,jersey,spring-boot,Spring,Web Services,Rest,Jersey,Spring Boot,我的Spring Boot+Jersey REST服务无法按预期工作 EmailExistsException在UserController中抛出,但我只收到错误500。总是我的异常没有被记录 我怀疑异常处理存在一些配置问题,但不知道在哪里设置它。有什么建议吗 @POST @Path("register") @Produces(MediaType.APPLICATION_JSON) public Response register(NewUserPayload newUserPayload) t

我的Spring Boot+Jersey REST服务无法按预期工作

EmailExistsException在UserController中抛出,但我只收到错误500。总是我的异常没有被记录

我怀疑异常处理存在一些配置问题,但不知道在哪里设置它。有什么建议吗

@POST
@Path("register")
@Produces(MediaType.APPLICATION_JSON)
public Response register(NewUserPayload newUserPayload) throws EmailExistsException, MessagingException
EmailExistsExceptionMapper

@Provider
public class EmailExistsExceptionMapper extends AbstractExceptionMapper       implements
    ExceptionMapper<EmailExistsException>
{
@Override
public Response toResponse(EmailExistsException e)
{
    ResponseEntity re = new ResponseEntity(org.springframework.http.HttpStatus.BAD_REQUEST);

    return this.errorResponse(HttpStatus.BAD_REQUEST_400, re, e);
}
}
@Slf4j
public abstract class AbstractExceptionMapper
{
protected Response errorResponse(int status, ResponseEntity responseEntity, Throwable t)
{
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw);
    t.printStackTrace(pw);
    log.error(sw.toString()); // logging stack trace.

    return customizeResponse(status, responseEntity);
}

private Response customizeResponse(int status, ResponseEntity responseEntity)
{
    return Response.status(status).entity(responseEntity).build();
}
}
格雷德尔先生

compile("org.springframework.boot:spring-boot-starter-web") {
    exclude module: 'spring-boot-starter-tomcat'
}
compile "org.springframework.boot:spring-boot-starter-jetty"
compile "org.springframework.boot:spring-boot-starter-security"
compile "org.springframework.boot:spring-boot-starter-aop"
compile "org.springframework.boot:spring-boot-starter-data-jpa"
compile "org.springframework.boot:spring-boot-starter-thymeleaf"
compile "org.springframework.boot:spring-boot-starter-jersey"
compile 'org.springframework.boot:spring-boot-starter-mail'

您是否已将CustomExceptionMapper配置为jax rs提供程序,并且您是否确定您的异常已包装到EmailExistsException中?你可能得看看这个帖子


解决我问题的答案:

我把包裹(“package.name”);这是我的根包名称,异常映射器的工作方式很有魅力

@Component
@ApplicationPath("/api")
public class JerseyConfig extends ResourceConfig
{
public JerseyConfig()
{
    packages("package.name");
    register(UserController.class);
    register(TimezoneController.class);
}
}

我也有同样的问题

我刚才在

然后它开始像魅力一样工作

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.two95.restful</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

Jersey Web应用程序
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
com.two95.restful
1.

如果使用ExceptionMapper,则必须注册例外映射程序:

@Component
@Provider
public class ApiApplicationExceptionMapper implements ExceptionMapper<Exception> {

    @Override
    public Response toResponse(Exception exception) {
       ...
    }
}

它有一个@Provider注释,是的,我确信它会被包装并抛出。另一件事是,当我尝试在EmailExistsExceptionMapper中放置断点时,它在调试模式下的IDEA中是不活动的。似乎不知怎么的它没有被使用?某些配置可能丢失,但在哪里?中没有有关此配置的信息。
声明会避免您声明控制器吗?我在互联网上的一些代码片段中找到了它。我现在在Scala,所以不能告诉你更多关于它的信息。谢谢!事实证明,您必须显式地
注册(YourExceptionMapper.class)
或通过
包(“YourExceptionMapperPackage”)
将其放入扫描包中。在我找到你的答案之前,我花了几个小时试图弄明白这一点。
@Configuration
public class JerseyConfig extends ResourceConfig {

    @Autowired
    ApplicationContext applicationContext;

    @PostConstruct
    public void init() {
        this.registerEndpoints();
        this.registerExceptionMappers();
    }

    private void registerEndpoints() {
        Map<String, Object> beans = applicationContext.getBeansWithAnnotation(Path.class);
        for (Object apiClass : beans.values()) {
            logger.info("Jersey register: " + apiClass.getClass().getName());
            register(apiClass);
        }
    }

    private void registerExceptionMappers() {
        Map<String, Object> beans = applicationContext.getBeansWithAnnotation(Provider.class);
        for (Object exceptionMapper : beans.values()) {
            logger.info("Jersey exception mapper register: " + exceptionMapper.getClass().getName());
            register(exceptionMapper);
        }
    }