我正在使用Restlet构建某种代理服务器,但是我遇到了一个问题,即没有根据客户端请求自动确定MediaType
的方法。
这是我的代码:
Representation entity = null;
entity.setMediaType(processMediaType(path));
处理媒体类型:
private MediaType processMediaType(String path){
MediaType type = MediaType.ALL;
if(path.endsWith("html")){
type = MediaType.TEXT_HTML;
} else if (path.endsWith("css")) {
type = MediaType.TEXT_CSS;
} else if (path.endsWith("js")) {
type = MediaType.TEXT_JAVASCRIPT;
} else if (path.endsWith("txt")) {
type = MediaType.TEXT_PLAIN;
} else if (path.endsWith("jpg")){
type = MediaType.IMAGE_JPEG;
} else if (path.endsWith("png")){
type = MediaType.IMAGE_PNG;
}
return type;
}
我想知道MediaType是否可以由框架自动构建(或者从请求获取MediaType,这对我来说不起作用),这样我就不需要执行这些if-else语句了这在捕捉各种媒体类型方面非常有限。
答案 0 :(得分:1)
为什么需要确定媒体类型?通常,当您在java中构造rest api时,可以为每种允许的媒体类型创建单独的方法,即
@Path("<your_path>")
@Consumes (MediaType.XML)
@Produces (MediaType.XML)
public Response processXMLRequest (...){
//a more general method to process all request
return processRequest (request, MediaType.XML);
}
@Path("<your_path>")
@Consumes (MediaType.JSON)
@Produces (MediaType.JSON)
public Response processXMLRequest (...){
//a more general method to process all request
return processRequest (request, MediaType.JSON);
}
等等......
答案 1 :(得分:1)
如果您需要,可以在ClientInfo
对象中找到此信息
在请求中。使用Restlet用于进行内容协商的相同机制,Em Ae也自动回答。
例如,在ServerResource
类函数中:
List<MediaType> supported = null;
MediaType type = getRequest().getClientInfo().getPreferredMediaType(supported);
以最适用的方式提供支持的MediaTypes
列表。
答案 2 :(得分:0)
Restlet根据Content-Type
标头获取请求的媒体类型。对于该值,您可以使用:
MediaType mediaType = getRequest().getEntity().getMediaType();
ClientInfo的媒体类型提示对应于Accept
标题中提供的内容:
getRequest().getClientInfo().getAcceptedMediaTypes();
要获取Restlet API中标头的映射,您可以查看以下链接: