由于Jersey忽略了我的自定义ObjectMapper,因此我正在与Grizzly,Jersey和Jackson一起使用REST应用程序。 POM依赖关系: <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-grizzly2-servlet</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.1.4</version> </dependency> </dependencies> 最终的版本是:灰熊2.3.3,jackson2.1.4和泽西岛2.2。 主要类(我希望显式注册Jersey组件): public class Main { public static void main(String[] args) { try { ResourceConfig rc = new ResourceConfig(); rc.register(ExampleResource.class); rc.register(ObjectMapperResolver.class); HttpHandler handler = ContainerFactory.createContainer( GrizzlyHttpContainer.class, rc); URI uri = new URI("http://0.0.0.0:8080/"); HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri); ServerConfiguration config = server.getServerConfiguration(); config.addHttpHandler(handler, […]
我正在从DropWizard 0.7.1迁移到0.8.1。 这包括从Jersey 1.x迁移到2.x. 在我使用Jersey 1.18.1的实现中,我实现了一个实现InjectableProvider的MyProvider (为了简单起见改变了所有的类名)。 这个类将创buildMyInjectable对象,包含自定义注入注释MyToken 。 MyToken包含MyToken传递和读取的各种属性。 最后,在Application类中,我注册了一个MyProvider的新实例,如下所示。 我已经做了一些研究,似乎无法绕过我在泽西2.x上重新创build(或replace,我想是)这样一个场景。 这里是目前的1.18.1实现: @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.PARAMETER, ElementType.FIELD }) public @interface MyToken { // Custom annotation containing various attributes boolean someAttribute() default true; // … } public class MyProvider implements InjectableProvider<MyToken, Parameter> { // io.dropwizard.auth.Authenticator private final Authenticator<String, MyObject> authenticator; public MyProvider(Authenticator<String, MyObject> authenticator) { this.authenticator […]
我正在使用Jersey和Tomcat的JAX-RS Web应用程序。 获取请求很好,但是当我尝试发布JSON我得到一个HTTP状态415 – 不支持的媒体types。 这是我简单的HelloWorld.java: package service; import javax.ws.rs.*; @Path("hello") public class HelloWorld { @GET @Produces("text/plain") public String get() { return "hello world"; } @POST @Consumes("application/json") public String post(JS input) { return input.hello; } public static class JS { public String hello; } } 这是我在邮差尝试的请求(与'应用程序/ JSON'头): 这是带库的项目布局: 我在用: Java 7 x64 泽西岛2.17 Tomcat 7.0.62 […]
我正在使用基于泽西的宁静服务实施策略来build立一个服务,将用于上传文件。 我的服务类名称是:UploadFileService.java(请参阅下面的代码) package com.jerser.service; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import com.sun.jersey.core.header.FormDataContentDisposition; import com.sun.jersey.multipart.FormDataParam; @Path("/fileUpload") public class UploadFileService { @POST @Path("/upload") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile( @FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) { String uploadedFileLocation = "d://uploaded/" + fileDetail.getFileName(); // save it […]
我正在寻找一种在泽西岛启用基于令牌的身份validation的方法。 我正在尝试不使用任何特定的框架。 那可能吗? 我的计划是:用户注册我的Web服务,我的Web服务生成一个令牌,发送给客户端,客户端将保留它。 然后客户端为每个请求发送令牌,而不是用户名和密码。 我正在考虑为每个请求和@PreAuthorize("hasRole('ROLE')")使用自定义filter,但我只是认为这会导致大量的数据库请求检查令牌是否有效。 或者不创buildfilter,并在每个请求中放置一个参数标记? 所以每个API首先检查令牌,然后执行一些检索资源。
从头开始,没有任何以前的泽西岛1.x的知识,我很难理解如何在我的Jersey 2.0项目中设置依赖项注入。 我也明白HK2可以在泽西岛2.0,但我似乎无法find有助于泽西岛2.0集成的文件。 @ManagedBean @Path("myresource") public class MyResource { @Inject MyService myService; /** * Method handling HTTP GET requests. The returned object will be sent * to the client as "text/plain" media type. * * @return String that will be returned as a text/plain response. */ @GET @Produces(MediaType.APPLICATION_JSON) @Path("/getit") public String getIt() { return "Got […]