带有@Provider注解的共享类

问题描述 投票:0回答:1

我有三个 quarkus 应用程序:

  • MyApplesRestApp
  • MyBananasRestApp
  • MyTomatoesRestApp

这些应用程序重用共享公共库中的一些类

FruitServicesLib

MyApplesRestApp
中,我有一个简单的异常处理程序来将异常映射到 HTTP 错误 400:

import javax.ws.rs.ext.ExtensionMapper
import javax.ws.rs.ext.Provider

@Provider
public class IllegalArgumentExceptionMapper implements ExtensionMapper<IllegalArgumentException> {
    @Override
    public Response toResponse(IllegalArgumentException) {
        returnResponse.status(Status.BAD_REQUEST).build();
    }
}

我想将上面的异常处理程序类移至公共库

FruitServicesLib
,但我也想在
MyApplesRestApp
MyBananasRestApp
中启用此异常处理程序,但不在MyTomatoesRestApp中启用。

最好的方法是什么?如何将 @Provider 注解的类移至公共库,但不始终激活它 - 在需要时有条件地启用它(通过 java 代码或使用某些配置)?

java dependency-injection jax-rs quarkus resteasy
1个回答
0
投票

1。扩展解决方案

我使用简单直接的方法实现了这一点,并且异常映射器中有更多我想避免重复的代码。

我的解决方案是从库中删除

@Provider
注释。在
MyApplesRestApp
MyBananasRestApp
中,我扩展了该类并添加
@Provider
注释以在项目中启用它。

库中的异常映射器:

import javax.ws.rs.ext.ExtensionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class IllegalArgumentExceptionMapper implements ExtensionMapper<IllegalArgumentException> {
    @Override
    public Response toResponse(IllegalArgumentException) {
        return Response.status(Status.BAD_REQUEST).build();
    }
}

MyApplesRestApp
MyBananasRestApp
中的异常映射器:

import com.mylib.IllegalArgumentExceptionMapper;

@Provider
public class MyIllegalArgumentExceptionMapper extends IllegalArgumentExceptionMapper {}

2。我有时也使用的另一个解决方案是使用@IfBuildProperty

@Provider
@IfBuildProperty(name = "common.illegal-exception-mapper.enabled", stringValue = "true")
public class IllegalArgumentExceptionMapper implements ExtensionMapper<IllegalArgumentException> {
...

应用程序的application.properties

common.illegal-exception-mapper.enabled=true
© www.soinside.com 2019 - 2024. All rights reserved.