当前位置: 代码迷 >> java >> mobilefirst - Java 适配器中的响应类型
  详细解决方案

mobilefirst - Java 适配器中的响应类型

热度:34   发布时间:2023-07-17 20:38:19.0

我有一个类(存储在 server/java 中),它返回一个 Response 类型对象,我想在适配器中使用它。

public class CorsResponse {
public static Response build() {
    return Response
            .ok()
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", "GET, POST")
            .header("Access-Control-Allow-Headers", "accept, origin, content-type")
            .header("Access-Control-Max-Age", "1728000")
            .build();
}

如果我在适配器的方法中使用这个类,我会得到一个异常:

javax.servlet.ServletException:java.lang.LinkageError:加载器约束冲突:加载器(com/ibm/ws/classloading/internal/AppClassLoader 的实例)之前为名称为“javax/ws/rs/core/”的不同类型启动了加载回复” ...

引起:java.lang.LinkageError:加载器约束违规:加载器(com/ibm/ws/classloading/internal/AppClassLoader 的实例)先前为名称为“javax/ws/rs/core/Response”的不同类型启动加载

如何设置要加载的响应类型?

我设法创建了一个外部项目,将类放在那里,将其编译为 jar 文件并将其包含在 adapters/adapter_name/lib 文件夹中(也添加到构建路径中)。

如果您对 CorsFilter 感兴趣,我建议像下面显示的那样实现它,并将该类添加到您的Application ......

@Provider
public class ResponseCorsFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext,
            ContainerResponseContext responseContext) throws IOException {

        responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, OPTIONS");


        String reqHead = requestContext.getHeaderString("Access-Control-Request-Headers");

        if(null != reqHead && !reqHead.equals("")){
            responseContext.getHeaders().add("Access-Control-Allow-Headers", reqHead);
        }

    }


}
  相关解决方案