gpt4 book ai didi

java - 重置 : Use converter service in filter

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:34 26 4
gpt4 key购买 nike

我在项目中使用spring和reSTLet。

我添加了一个过滤器,用于检查请求 URI 是否有效并返回有效 URI 列表(资源发现机制)。

我必须根据 ACCEPT header 使用转换器服务(或 conneg 服务)以 json/xml 形式返回响应。在过滤器中,我得到响应对象。我创建一个自定义类的对象并用有效的 url 填充它。为了将此对象传递给响应,我使用 json 序列化器创建该对象的字符串表示形式(媒体类型 - json)并设置响应实体。

@Override
protected int beforeHandle(Request request, Response response) {
String relativeUri = request.getResourceRef().getRemainingPart();
if(mappings.containsKey(relativeUri)) {
return Filter.CONTINUE;
}

ArrayList<String> nextLevelURIs = getNextLevelResourcesUri(request);

if(nextLevelURIs == null) {
return Filter.CONTINUE;
}

Items items = getItems(nextLevelURIs);

response.setEntity(serializer.serialize(items), MediaType.APPLICATION_JSON);
return Filter.STOP;
}

为了实现转换器服务的功能,我必须检查 ACCEPT header 并创建相应的表示(json/xml)。但我已经在其他资源类中使用转换器服务。

有没有办法在过滤器中使用转换器服务。如果我设置 json 字符串表示形式并返回 Filter.CONTINUE,转换器服务能否将实体从 json 表示形式转换为 xml 表示形式,反之亦然,具体取决于 ACCEPT header ?

谢谢。

最佳答案

找到了一种方法来做到这一点。请参阅代码。

@Override
protected int beforeHandle(Request request, Response response) {
String relativeUri = request.getResourceRef().getRemainingPart();
if(mappings.containsKey(relativeUri)) {
return Filter.CONTINUE;
}

ArrayList<String> nextLevelURIs = getNextLevelResourcesUri(request);

if(nextLevelURIs == null) {
return Filter.CONTINUE;
}

if(!request.getMethod().equals(Method.GET)) {
response.setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED);
return Filter.STOP;
}

ArrayList<Variant> variantList = new ArrayList<Variant>();

Application application = getApplication();

variantList.add(new Variant(MediaType.APPLICATION_XML));
variantList.add(new Variant(MediaType.APPLICATION_JSON));

Variant variant = application.getConnegService().getPreferredVariant(variantList, request, application.getMetadataService());

Items items = (relativeUri.equals("/")) ? getVersionItems(nextLevelURIs) : getItems(nextLevelURIs);

try { response.setEntity(application.getConverterService().toRepresentation(items, variant, null));
} catch (IOException e) {
throw new ServerException(e.getMessage());
}

return Filter.STOP;
}

关于java - 重置 : Use converter service in filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com