- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 ReSTLet 2.3 (SE) 中,我尝试使用媒体类型来控制版本。我当前的尝试涉及在入站路由中注册新扩展:
@Override
public Restlet createInboundRoot() {
...
getTunnelService().setExtensionsTunnel(true);
getMetadataService().addExtension("vnd.myapp.v1", MediaType.valueOf("application/vnd.myapp.v1+json"));
getMetadataService().addExtension("vnd.myapp.v2", MediaType.valueOf("application/vnd.myapp.v2+json"));
...
}
我的资源接口(interface)设置如下:
public interface UsersResource {
@Options
void getCorsSupport();
@Get("vnd.myapp.v1")
Collection<User> representV1() throws Exception;
// Should be the default if */* is specified
@Get("json | vnd.myapp.v2")
Collection<User> representV2() throws Exception;
}
然后我尝试按如下方式指定媒体类型:
http://localhost:8080/api/users?media=vnd.myapp.v1
这个想法是,如果有人将媒体类型指定为 vnd.myapp.v1
他们会得到 representV1()
(JSON),如果他们将媒体类型指定为 vnd.myapp.v2
他们会得到 representV2()
(JSON),并且(可选)如果他们没有询问任何具体信息,他们会得到 representV2()
。通过上述设置,无论请求什么,我总是会返回representV2()
。
最佳答案
这是我测试时的结果:
接受:application/vnd.myapp.v1+json
-> representV1
被调用接受:application/vnd.myapp.v2+json
-> 调用representV2
接受:application/application/json
-> 调用representV1
接受:*/*
-> 调用representV1
看起来表达式 json | vnd.myapp.v2
无法正常工作。解决方法是将representV2分成两个方法:json
和vnd.myapp.v2
。
当未指定接受 header 时,ReSTLet 似乎会调用它找到的带有注释 Get
的第一个方法。
可以帮助您的是启用跟踪以查看不同方法的分数:
public class RestletLauncher {
public static void main(String[] args) {
Engine.getInstance().setLogLevel(Level.FINEST);
launchApplication();
}
}
你会看到这样的痕迹:
Score of annotation "MethodAnnotationInfo [javaMethod: public org.restlet.representation.Representation test.MyServerResource1.testGetVnd1(), javaClass: class test.MyServerResource1, restletMethod: GET, input: vnd.myapp.v1, value: vnd.myapp.v1, output: vnd.myapp.v1, query: null]"= 0.5
Total score of variant "[application/vnd.myapp.v1+json]"= 0.04191667
Score of annotation "MethodAnnotationInfo [javaMethod: public org.restlet.representation.Representation test.MyServerResource1.testGetJson(), javaClass: class test.MyServerResource1, restletMethod: GET, input: json, value: json, output: json, query: null]"= 0.5
Total score of variant "[application/json]"= 0.04191667
Score of annotation "MethodAnnotationInfo [javaMethod: public org.restlet.representation.Representation test.MyServerResource1.testGetVnd2(), javaClass: class test.MyServerResource1, restletMethod: GET, input: vnd.myapp.v2, value: vnd.myapp.v2, output: vnd.myapp.v2, query: null]"= 0.5
Total score of variant "[application/vnd.myapp.v2+json]"= 0.04191667
希望对你有帮助蒂埃里
关于java - 使用自定义媒体类型的 ReSTLet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30704998/
我有一个 ReSTLet (v2.1.1) 组件,它使用 ServerResource 来处理 HTTP GET 请求。 我想将过滤器和/或路由器放入组件中,以便它们可以在请求到达 ServerRes
我有一些使用 ReSTLet 框架的代码。它正在将错误写入我的 log4j 日志文件: 2012-05-30 12:16:42,169 3278917 ERROR [STDERR] (Thread-9
我需要在 ReSTLet 资源类(它扩展 ServerResource)中获取应用程序根。我的最终目标是尝试返回到另一个资源的完整显式路径。 我目前正在使用 getRequest().getResou
我正在使用 ReSTLet 来实现 Web 服务。客户端(也使用 ReSTLet)对服务器进行多次连续调用,但在少数调用成功完成后,进一步的调用挂起服务器,显示消息: INFO: Stop accep
我想创建一个 servlet 作为一堆 reSTLet 应用程序的容器。我已经为一个 reSTLet 应用程序完成了 servlet,但我不知道如何修改 web.xml 以适应许多应用程序。这是单个
我通过使用带有camel的reSTLet来公开休息服务。 我公开了一个休息服务作为一端,而在另一端我覆盖了流程方法。代码如下所示, from("restlet:/service/serviceName
我有一个 ReSTLet (2.0.10) 应用程序,我从以下代码开始: public static void main(final String[] args) { try {
这是我限制每分钟请求数量的代码: MethodAuthorizer ma = createMethodAuthorizer(); ma.setNext(router);
我无法在同一个 Java Web 应用程序中使用 ReSTLet 服务器和客户端 jar。问题是服务器和客户端的某些 jar 具有相同的名称。如果我尝试删除重复的 jar ,我会收到类似的错误 jav
我正在尝试在 RESTlet 上运行第一个服务器教程 docs但是即使我将 jars 添加到我的类路径中,我也会收到错误。我添加了 org.reSTLet.jar 和 org.reSTLet.ext.
我有一个测试客户端,它发出 ReSTLet 请求,如下所示:公共(public)类 TestReSTLet { public static void main(String[] args) throw
我已经完成了 ReSTLet 1.1 教程的第一个资源部分,并通过继承 Resource 类并覆盖适当的方法并使用一个 Router 来附加子类 Resource 类。 所以我在想 - ReSTLet
我在 tomcat 环境中使用带有 reSTLet 的 jackson 时遇到问题。正如您可以从 restlet site 中读到的那样,他们保证 jackson 扩展 provides a plug
我试图通过 reSTLet 接收文件,但只得到完整的 MULTIPART_FORM_DATA。如何提取我的特定文件? 我找到了一些代码块,但它们的类型不可用... RESTlet: How to pr
我们使用 ReSTLet 2.0.8 并有一个覆盖 org.reSTLet.Application#createInboundRoot() 的 Application 实例。在那里,我们创建 Rout
我在我的应用程序中使用 ReSTLet 2.3.5。当调用某个服务器资源的 GET 请求处理程序时,我收到以下错误: [10:26:04] [Restlet-860541310/WARN]: Nov
我想运行这些示例,但它们使用了不推荐使用的 ReSTLet API 和不存在的 db4o API。总之,不编译。 我是 ReSTLet(和 Java)的新手,所以我真的不想浪费时间尝试修复代码。我希望
首先,我检查了关于这个问题的讨论,但找不到我的问题的答案,这就是我打开这个问题的原因。 我已经使用reSTLet 2.0.15 设置了一个Web 服务。该实现仅适用于服务器。与服务器的连接是通过网页进
我有一个客户端向服务器发出请求,这可能需要一些时间才能响应。 当服务器想要回复时,它抛出以下异常: The connection was broken. It was probably closed
我是reSTLet的新手,并试图了解我应该在android上使用哪个HTTPS客户端选项。哪个 HTTPS 客户端选项对 Android 来说最强大和稳定? 我使用的是reSTLet 2.1rc4(和
我是一名优秀的程序员,十分优秀!