Spring Boot和Jersey静态内容

时间:2018-01-17 14:17:44

标签: spring-boot jersey

我已将spring boot配置为加载Jersey作为过滤器。

spring.jersey.type =滤波器 我已将Jersey属性设置为允许静态内容:

property(ServletProperties.FILTER_FORWARD_ON_404,true); 我在spring boot中读过,我可以将我的内容放在我的资源目录中,在名为'static','public'文件夹的目录下。但是,我永远无法访问我的index.html页面。我使用它的唯一方法是在src / main下创建一个webapp目录并将index.html文件放在那里。我正在将应用程序部署为jar。

当使用异常球衣提供程序处理程序时会出现问题:

package com.product.api.endpoint;

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

import org.springframework.stereotype.Component;

import com.product.api.entity.DefaultError;
import com.product.api.exception.DefaultException;

@Component 
@Provider
public class DefaultExceptionHandler  implements ExceptionMapper<RuntimeException> {

    @Override
    public Response toResponse(RuntimeException ex) {

        if(ex instanceof DefaultException) {
            DefaultException dex = (DefaultException) ex;
            return Response.status(dex.getCode())
                            .entity(new DefaultError(dex.getMessage()))
                            .type(MediaType.APPLICATION_JSON)
                            .build();
        } else {
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                            .entity(new DefaultError(ex.getMessage()))
                            .type(MediaType.APPLICATION_JSON)
                            .build();
        }


    }

}

如果未定义@Provider,则静态内容就像魅力一样。

1 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题,并通过添加以下几行来解决了这个问题:

public Response toResponse(RuntimeException exception) {
  if (exception.getMessage().equals("HTTP 404 Not Found")) {
    // allow ServletProperties.FILTER_FORWARD_ON_404 to work
    return Response.status(404).build(); // don't change content type or set entity
  }
  //...
}