Tag: jax rs

处理HttpServletResponse时运行JerseyTest的问题

这是一个示例Resource类: @Path(“/resource”) public class SomeResource { @GET @Produces({MediaType.APPLICATION_XML}) public String someMethod(@QueryParam(“param1”) String param1, …, @Context HttpServletRequest request) { String remoteUser = request.getRemoteAddr(); // Business logic here. return response; } } 而JerseyTest的资源: public class TestSomeResource extends JerseyTest { @Override protected Application configure() { enable(TestProperties.LOG_TRAFFIC); return new ResourceConfig(SomeResource.class); } @Test public void testXMLResponse() { String response = […]

使用哪个init-param:jersey.config.server.provider.packages或javax.ws.rs.Application?

我正在将JAX-RS Web服务部署到Tomcat servlet容器。 我见过的代码示例使用以下两种方法之一来指示web.xml文件中的资源: 方法1 – 使用`jersey.config.server.provider.packages`init-param Jersey Web Application org.glassfish.jersey.servlet.ServletContainer jersey.config.server.provider.packages com.example 1 …期望资源驻留在com.example包中,我想通过Java RTTI发现。 方法2 – 使用`javax.ws.rs.Application` init-param jersey-serlvet org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application full.qualified.name.to.MyApplication 1 … MyApplication类明确标识资源类: public class MyApplication extends javax.ws.rs.core.Application { public Set<Class> getClasses() { Set<Class> s = new HashSet<Class>(); s.add(ResourceA.class); return s; } 使用单一方法与其他方法纯粹是品味和配置工作的问题,需要考虑哪些权衡取舍? 就个人而言,我更喜欢方法2提供的更细粒度的控制,但是maven Jersey 2.7原型: mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp \ -DarchetypeGroupId=org.glassfish.jersey.archetypes […]

基于JAX-RS的实现中的简单REST资源版本控制?

REST资源版本控制的最佳实践是将版本信息放入HTTP请求的Accept / Content-Type标头中,使URI保持不变。 以下是用于检索系统信息的REST API示例请求/响应: ==> GET /api/system-info HTTP/1.1 Accept: application/vnd.COMPANY.systeminfo-v1+json <== HTTP/1.1 200 OK Content-Type: application/vnd.COMPANY.systeminfo-v1+json { “session-count”: 19 } 请注意,MIME类型中指定了版本。 这是版本2的另一个请求/响应: ==> GET /api/system-info HTTP/1.1 Accept: application/vnd.COMPANY.systeminfo-v2+json <== HTTP/1.1 200 OK Content-Type: application/vnd.COMPANY.systeminfo-v2+json { “uptime”: 234564300, “session-count”: 19 } 有关更多说明和示例,请参见http://barelyenough.org/blog/tag/rest-versioning/ 。 是否有可能在基于Java的JAX-RS实现中轻松实现此方法,例如Jersey或Apache CXF? 目标是让几个@Resource类具有相同的@Path值,但是根据MIME类型中指定的实际版本提供请求? 我一般都研究过JAX-RS,特别是泽西,并且没有找到支持。 泽西岛没有机会用相同的路径注册两个资源。 需要实现WebApplicationImpl类的替换以支持它。 你能提出什么建议吗? 注意:需要同时提供同一资源的多个版本。 新版本可能会引入不兼容的更改。

使用JAX-RS(Jersey)和@RolesAllowed自定义HTTP状态响应

使用我非常简单的JAX-RS服务,我使用Tomcat和JDBC领域进行身份validation,因此我正在使用JSR 250注释。 问题是我想在HTTP状态响应中返回自定义消息体。 状态代码(403)应保持不变。 例如,我的服务如下所示: @RolesAllowed({ “ADMIN” }) @Path(“/users”) public class UsersService { @GET @Produces(MediaType.TEXT_PLAIN) @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public String getUsers() { // get users … return …; } } 如果角色与“ADMIN”不同的用户访问该服务,我想将响应消息更改为类似的内容(取决于媒体类型[xml / json]): Not allowed. 目前泽西岛返回以下机构: HTTP Status 403 – Forbidden type Status report message Forbidden description Access to the specified resource (Forbidden) has been forbidden. […]

在服务器上运行unit testing(JAX-RS)

我正在编写一个JAX-RS(Jersey + Maven)应用程序,它可以执行一些棘手的操作(例如调用WAR中嵌入的本机可执行文件)。 我需要在服务器上运行[部分]unit testing(JUnit4)(运行Tomcat 7.0.22的Amazon Elastic Beanstalk)来检查一切是否正常。 除了RYO(滚动你自己的)之外,还有一种标准的,灵活的方式吗? 我发现的东西似乎更多地与开发者机器上的集成测试(即Jersey测试框架)有关。 甚至RYO让我感到困惑……我怎样才能从源包中调用测试包中的代码? 基本上,我想创建一个我可以调用的/ test资源,它将以漂亮的格式从服务器返回我的unit testing结果。 如果我可以做/ test / {category}更好

将Jetty与JAX-RS-Jersey集成

在详尽搜索了Web和Stackoverflow之后,我仍然在试图弄清楚如何集成Jersey和Jetty提供的RESTlet样式接口。 我的Jetty服务器已启动并运行,因此Jersey似乎也很容易使用,有没有人知道如何将两者结合在一起? 任何具体的链接都会有所帮助 – 我对servlet编程也有点新意。

如何从与Jersey的多部分表单中读取具有相同名称的多个(文件)输入?

我已经成功开发了一项服务,我在其中阅读在泽西岛以多部分forms上传的文件。 这是我一直在做的非常简化的版本: @POST @Path(“FileCollection”) @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile(@FormDataParam(“file”) InputStream uploadedInputStream, @FormDataParam(“file”) FormDataContentDisposition fileDetail) throws IOException { //handle the file } 这工作得很好,但我已经给了一个新的要求。 除了我上传的文件外,我还要处理任意数量的资源。 我们假设这些是图像文件。 我想我只是为客户端提供一个表单,其中包含一个文件输入,第一个图像的一个输入和一个允许向表单添加更多输入的按钮(使用AJAX或简单的JavaScript)。 因此,用户可以为表单添加更多图像输入,如下所示: 我希望阅读与集合同名的字段非常简单。 我在MVC .NET中使用文本输入成功完成了它,我认为在Jersey中不会更难。 事实certificate我错了。 找不到关于这个主题的教程,我开始尝试。 为了看看如何做到这一点,我把问题简化为简单的文本输入。 Multiple inputs with the same name 显然,我需要将某种集合作为我方法的参数。 这是我尝试过的,按集合类型分组。 排列 起初,我检查了Jersey是否足够智能来处理一个简单的数组: @POST @Path(“FileCollection”) @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile(@FormDataParam(“test”) String[] inputs) { //handle the request } 但arrays未按预期注入。 […]

Spring MVC REST不符合JAX-RS。 有关系吗?

我在Spring MVC REST方面有很好的经验,并提供了几个可靠的项目。 我的问题是关于JAX-RS合规性。 这是否重要,因为Spring会留在这里,我不会预见(也没有理由)不得不在很短的时间内从Spring MVC REST转移到Jersy或任何其他JAX-RS impl。 任何应该迫使我考虑使用JAX-RS实现而不是Spring MVC REST的东西?

JAX-RS – 在apache CXF中没有根节点的JSON

如果我们在REST响应中返回集合对象,那么JSON(它将根元素节点作为集合对象名称 – 在这种情况下是雇员)将采用以下格式: { “employees”: [{ “id”: “1”, “name”: “employee name1”, “company”: “ABC Company” }, { “id”: “2”, “name”: “employee name2”, “company”: “XYZ Company” }] } 这是我们在应用程序上下文中的JsonProvider配置的一个截断器 @XmlRootElement(name=”emps”) public class EmpList{ private List employees; //setter and getter methods } @XmlRootElement(name=”emp”) public class Emp{ private int id; private Sting name; private String company; //setter and getter […]

将JAX-RS与CDI集成的正确方法?

我曾经在Jersey REST资源中集成Service和DAO bean,在Java EE教程之后用@Path注释它们 通常,要使JAX-RS使用企业bean,您需要使用@Path注释bean的类以将其转换为根资源类。 您可以将@Path注释与无状态会话bean和单例POJO bean一起使用。 所以我的代码曾经是这样的: @Path(“/”) public class ServiceResource { @Inject private AccountService accountService; @GET @Path(“/account/get”) public Account getAccount(@QueryParam(“id”) String id) { return accountService.get(id); } } @javax.inject.Singleton @Path(“”) public class AccountService { public Account get(String id){…} } 现在,我开始将Quartz Job集成到我的应用程序中,我想找到一种方法将我的AccountService注入到这样的工作中 public class AccountJob implements Job { @Inject private AccountService accountService; @Override public void […]