在使用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}}方法。