ParamConverterProvider无法在Wildfly> 10.1.0 Final上运行

时间:2019-08-17 19:21:58

标签: java jax-rs wildfly resteasy

在使用Jax-RS创建REST Web服务时,我使用ParamConverterProvider自动将字节数组转换为base64,反之亦然。

我有一个如下所示的端点:

@POST
    public SignResponse Sign(SigRequest sigRequest) {
        SignResponse response = new SignResponse();
        try {
            response.setSignedHash(createDetachedSig(sigRequest.getHash()));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return response;
    }

我的SigRequest如下所示:

public class SigRequest {

    private byte[] hash;

    public byte[] getHash() {
        return hash;
    }

    public void setHash(byte[] hash) {
        this.hash = hash;
    }



}

我的SigResponse看起来像这样:

public class SignResponse {

        private byte[] signedHash;

        public byte[] getSignedHash() {
            return signedHash;
        }
        public void setSignedHash(byte[] signedHash) {
            this.signedHash = signedHash;
        }

    }

我实现了ParamConverterProvider界面,如下所示:

@Provider
public class MyParamConverterProvider implements ParamConverterProvider{

    @SuppressWarnings("unchecked")
    public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation[] annotations) {
        System.out.println(rawType + " " + genericType + " " + annotations);
        if (rawType.equals(byte[].class)) {
            return (ParamConverter<T>) new Base64ParamConverter();
        }
        return null;
    }

}

我还为 byte [] 实现了 ParamConverter ,如下所示:

public class Base64ParamConverter implements ParamConverter<byte[]>{

      public byte[] fromString(String s){
        return Base64.getDecoder().decode(s);
      }

      public String toString(byte[] bytes){ 
        return Base64.getEncoder().encodeToString(bytes);
      }

    }

此代码在Wildfly 10.1.0 Final上运行良好。但是,当我在高于10.1.0 Final的任何版本(包括11.0.0和最新版本(17.0.1 Final))上尝试使用该功能时,它将无法正常工作。我得到400-错误的请求,并且代码从未到达MyParamConverterProvider的{​​{1}}方法。

0 个答案:

没有答案