java cxf 参数_java – 一般如何处理CXF请求处理程序中的输入参数?

我一直在使用apache CXF(版本2.2.2)JAX-RS做一些工作.我想在调用业务方法之前在CXF请求处理程序中引入数据验证层.幸运:),我在请求处理程序(DataValidationHandler)中遇到输入参数处理问题.我可以通过请求处理程序中的代码行手动读取

JSON对象.但它与在CXF框架中注册的JSONProvider重复.因为JSON对象输入流只能被读取一次,否则我们将遇到异常“java.io.EOFException:由于输入结束而没有内容映射到Object”.此外,重复的JSON对象反序列化将影响性能.以下代码示例供您参考.

手动从HTTP正文中读取JSON对象:

OperationResourceInfo ori = paramMessage.getExchange().get(OperationResourceInfo.class);

MultivaluedMap values = new MetadataMap();

List objList = JAXRSUtils.processParameters(ori, values, paramMessage);

在CXF JAX-RS框架中注册JSONProvider:

从输入流中读取JSON对象到Java对象:

public Object readFrom(......){

ObjectMapper objectMapper = new ObjectMapper();

Object result = objectMapper.readValue(entityStream, TypeFactory.defaultInstance().constructType(genericType));

Return result;

}

我通过以下代码行手动处理路径参数.

OperationResourceInfo ori = paramMessage.getExchange().get(OperationResourceInfo.class);

URITemplate t1 = ori.getClassResourceInfo().getURITemplate();

URITemplate t2 = ori.getURITemplate();

UriInfo uriInfo = new UriInfoImpl(paramMessage, null);

MultivaluedMap map = new MetadataMap();

t1.match(uriInfo.getPath(), map);

String str = map.get(URITemplate.FINAL_MATCH_GROUP).get(0);

t2.match(str, map);

String pathParameter= null;

if (map.containsKey("pathParam") && !ValidationUtil.isEmpty(map.get("pathParam")))

{

pathParameter= map.get("pathParam").get(0);

}

我的问题在这里:

>一般如何处理请求处理程序中http体的POST / PUT输入参数?

>如何有效地避免性能问题来读取输入参数?

>有没有办法在CXF(JSONProvider)的参数读取和业务方法调用之间注入验证(处理程序/拦截器)层?

>有没有优雅的方法来处理路径参数?

谢谢你的帮助.任何评论&建议将不胜感激.

问候,

迪伦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值