标签: jersey-2.0

使用Jackson ObjectMapper和Jersey

我正在使用Jersey 2.4创建一个简单的REST接口来提供JSON对象.我的问题是我正在尝试使用fastxml Jackson注释来控制输出,这对我不起作用.我已将注释放入我的bean类中,但它们被忽略了.

当我显式创建一个ObjectMapper并使用它来对Java bean进行字符串化时,我得到了我想要的输出,它尊重了Jackson注释.但是,我更希望我不必执行此步骤,以便我的资源类可以简单地返回bean,并且Jersey框架负责对其进行字符串化.

我试图使用Custom ObjectMapper与Jersey 2.2和Jackson 2.1的答案解决这个问题,但是,这似乎对我没有用.我看到ContextResolver已创建,但从未调用过.

我也花了很多时间试图解决这个看似简单的问题.我已将其删除为一个非常简单的测试用例,如下所示.我很感激任何帮助解决这个问题.

资源Java类:

@Path("resource")
public class MainResource {

    public static class Foobar {
        @JsonIgnore
        private String foo = "foo";
        private String baa = "baa";
        private Map<String, List<? extends Number>> map = new HashMap<>();

        public Foobar() {
            map.put("even", Arrays.asList(new Integer[] { 2, 4, 6, 8, 10 }));
            map.put("odd", Arrays.asList(new Integer[] { 1, 3, 5, 7, 9 }));
            map.put("float", Arrays.asList(new Float[] { 1.1F, 2.2F, 3.3F }));
        }

        public String getFoo() {
            return …
Run Code Online (Sandbox Code Playgroud)

java rest spring json jersey-2.0

14
推荐指数
4
解决办法
4万
查看次数

为什么"java.lang.IllegalStateException:资源配置在此上下文中不可修改".出现部署Jersey应用程序?

我创建了一个在本地实现REST服务的应用程序:

Eclipse Indigo Jersey 2.4 Tomcat 7.0.47

使用Eclipse在本地运行时,服务工作正常,但在部署我的WAR文件时,尝试对其中一个服务URL执行GET时会出现以下异常:

HTTP Status 500 - Servlet.init() for servlet com.app.rest.MyResourceConfig threw exception

type Exception report

message Servlet.init() for servlet com.app.rest.MyResourceConfig threw exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet.init() for servlet com.app.rest.MyResourceConfig threw exception
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    java.lang.Thread.run(Thread.java:662)

root cause

java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
    org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:270)
    org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:218)
    org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:448)
    org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:300)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349)
    javax.servlet.GenericServlet.init(GenericServlet.java:160)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) …
Run Code Online (Sandbox Code Playgroud)

jax-rs tomcat7 jersey-2.0

14
推荐指数
4
解决办法
3万
查看次数

在Tomcat 8上实施Jersey 2.x的最佳方法是什么?

我有Web容器和Tomcat的知识,可以部署静态和动态网站.但我是REST和泽西新手.我已阅读2.6用户指南,查看了许多网站和YouTube视频.在1.x Jersey上似乎有很多信息,但在2.x上没有太多信息我可以在我的环境中使用1.18,但似乎无法使任何部署模型适用于2.x. 我在2.x中注意到有一个应用程序部署模型.所以我想我会问一些非常通用的问题来开始.

  1. 哪种部署模型最适合通过Tomcat 8进行基本REST服务?为什么?
  2. 我看到使用2.6部署的.jars与使用1.18部署的.jars有很大不同.有没有一种简单的方法可以告诉您基本的Tomcat安装需要哪些罐子?
  3. 如果你有一个基本的例子,那就太好了.

谢谢

java jersey-2.0 tomcat8

13
推荐指数
2
解决办法
2万
查看次数

检测客户端中止请求Jersey

我有Jersey提供restfull网络服务.经常发生客户端中止通过ajax完成的请求,这里解释的ajax abort方法中止了ajax请求

在服务器端,我得到以下输出.哪个不好看.有没有办法在泽西岛检测中止请求?

SEVERE: An I/O error has occurred while writing a response message entity to the container output stream.
org.glassfish.jersey.server.internal.process.MappableException: ClientAbortException:  java.net.SocketException: Broken pipe
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:96)
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1154)
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:571)
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:378)
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:368)
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:262)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:319)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:236)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1028)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:219)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) …
Run Code Online (Sandbox Code Playgroud)

java ajax jquery tomcat7 jersey-2.0

13
推荐指数
1
解决办法
2万
查看次数

在Jersey测试呼叫上设置查询参数

我有一个基于Jersey的Java servlet:

@Path("foo")
class Foo {
  @GET
  @Path("bar")
  public Response bar(@QueryParam("key") String value) {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以在Tomcat中称它为:

http://localhost:8080/container/foo/bar?key=blah
Run Code Online (Sandbox Code Playgroud)

但是,在我的JerseyTest中,使用Grizzly,它没有正确处理参数.此测试用例返回404错误:

@Test
public void testBar() {
  final Response response = target("foo/bar?key=blah").request().get();
}
Run Code Online (Sandbox Code Playgroud)

我怀疑问题是它正在寻找一个名为资源foo/bar?key=blah而不是试图传递key=blah给资源的资源foo/bar.如果我只是传递"foo/bar"target(),我得到一个500,因为代码抛出一个null参数的异常.

我查看了Jersey测试文档,以及一些示例,我发现了一些可能用于将参数传递给GET的神秘内容,但没有一个看起来像是为参数赋值,所以我并不积极如何我会用它.

如何将该值传递给该参数?

java jersey grizzly jersey-2.0

13
推荐指数
1
解决办法
1万
查看次数

Jersey 2.6杰克逊提供者注册

我正在使用Jersey 2.6实现REST Web服务,

我在注册Jackson提供程序以获得JSON支持时遇到了麻烦,我已经根据jeresy文档(https://jersey.java.net/documentation/2.6/user-guide.html#json.jackson)实现了.

  1. 添加maven依赖 - jersey-media-json-jackson
  2. 实现了ContextResolver类.
  3. 使用@Provider对其进行注释以启用"Auto-Discoverable Features"
  4. web.xml具有提供程序类的包名称,因此将在扫描期间注册提供程序.

参考:http: //blog.dejavu.sk/2013/11/19/registering-resources-and-providers-in-jersey-2/

由于某种原因杰克逊JSON提供商没有注册,我错过了什么?

jersey jackson jersey-2.0

13
推荐指数
1
解决办法
2万
查看次数

如何在tomcat 7中使用Jersey 2中的异步回调

如何在tomcat服务器中使用jersey 2的异步回调.我在Jersey手册中找到了一些例子:https://jersey.java.net/documentation/latest/user-guide.html#d0e8496.

但是当我想用以下代码测试以下代码时会出现问题:https://jersey.java.net/documentation/latest/user-guide.html#d0e8615代码,如Jersey 2手册中所述.

-------------------------------------------------- -------------------------------------------------- ---------------------------

因为,手动版本已经更改,我在这里发布代码:

这是我的服务:

            import javax.ws.rs.GET; 
            import javax.ws.rs.Path; 
            import javax.ws.rs.Produces; 
            import javax.ws.rs.container.AsyncResponse; 
            import javax.ws.rs.container.CompletionCallback; 
            import javax.ws.rs.container.Suspended; 
            import javax.ws.rs.core.MediaType; 
            import javax.ws.rs.core.Response; 

            @Path("/resource") 
            public class AsyncResource { 
                private static int numberOfSuccessResponses = 0; 
                private static int numberOfFailures = 0; 
                private static Throwable lastException = null; 

                @GET 
                public void asyncGetWithTimeout(@Suspended final AsyncResponse asyncResponse) { 
                System.out.println("AsyncResource.asyncGetWithTimeout()"); 
                    asyncResponse.register(new CompletionCallback() { 
                        @Override 
                        public void onComplete(Throwable throwable) { 
                            if (throwable == null) { …
Run Code Online (Sandbox Code Playgroud)

java rest tomcat asynchronous jersey-2.0

12
推荐指数
2
解决办法
1万
查看次数

JerseyTest和JUnit抛出NullPointerException

我在球衣测试框架上遇到了一些问题.如果我使用@Before和@After注释,则target方法抛出NullPointerException.我认为JerseyTest适用于JUnit?我的问题在哪里?

  • 泽西岛:2.12
  • JUnit:4.11

代码失败:

public class MyResourceTest extends JerseyTest {
    @Before
    public void setUp() { }

    @After
    public void tearDown() { }

    @Override
    protected Application configure() {
        return new ResourceConfig(MyResource.class);
    }

    @Test
    public void SHOULD_RETURN_BAD_REQUEST() throws IOException {
        System.out.println(target("myPath"));
        assertEquals(1, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

位于org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:566)的java.lang.NullPointerException,位于foo.bar.MyResourceTest的org.glassfish.jersey.test.JerseyTest.target(JerseyTest.java:580). SHOULD_RETURN_BAD_REQUEST(MyResourceTest.java:43)

有效的代码:

public class MyResourceTest extends JerseyTest {
    @Override
    protected Application configure() {
        return new ResourceConfig(MyResource.class);
    }

    @Test
    public void SHOULD_RETURN_BAD_REQUEST() throws IOException {
        System.out.println(target("myPath"));
        assertEquals(1, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

JerseyWebTarget { http://localhost:9998/myPath }
Run Code Online (Sandbox Code Playgroud)

java junit overriding junit4 jersey-2.0

12
推荐指数
2
解决办法
3427
查看次数

搬到球衣后性能下降2

我们正在使用弹簧4,嵌入式码头9和平针织物的服务器上工作.最近,我们搬到了球衣2.13,我们注意到性能下降.我使用YourKit进行了一些调查.我看到在球衣的反射中有大量的CPU使用率.此外,还有许多NoSuchMethodExceptionsClassNotFoundExceptionsYoukit快照.

在此输入图像描述

是否有任何球衣配置或最佳做法可以避免这个问题,或优化球衣?或者这可能是球衣2中的一个已知问题?

以下是YourKit的两个截图,显示了排除套接字read(java.net.SocketInputStream.socketRead0)后的热点.第一个是Merged Callees:

在此输入图像描述

第二个是Back Trace:

在此输入图像描述

谢谢.

java spring jersey-2.0

12
推荐指数
1
解决办法
648
查看次数

自定义jersey param抛出异常时的MultiException

注意:有关重现此问题的所有代码,请访问https://gist.github.com/SrikanthRao/c9fc35e6fe22a74ab40c

http:// localhost:8080/date/bean?date = 2014-13-23 (使用BeanParam)生成"{"代码":500,"message":"处理您的请求时出错.它已被记录(ID 48be9aa43bd49547)."}"而没有将MultiExceptionMapper添加到泽西.

如果我将MultiExceptionMapper添加到jersey,则上面的url会导致

"日期不是YYYY-MM-DD格式或无效"

http:// localhost:8080/date?date = 2014-13-23(直接@QueryParam参数)生成"日期不是YYYY-MM-DD格式或无效"

几个问题:

  1. 这是以更干净的方式处理输入验证的正确方法吗?
  2. 我希望这可以工作,而无需添加我自己的MultiExceptionMapper.Jersey是否支持在资源方法中作为@BeanParam注入的POJO中的自定义*Params?

这是请求时生成的堆栈跟踪(不将MultiExceptionMapper添加到jersey).当然删除了很长的痕迹.如果您需要完整的堆栈跟踪,请告诉我.

    ERROR [2015-05-04 18:48:33,366] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: 0f23e4de758653d6
    ! javax.ws.rs.WebApplicationException: HTTP 400 Bad Request
    ! at io.dropwizard.jersey.params.AbstractParam.<init>(AbstractParam.java:28) ~[dropwizard-jersey-0.8.1.jar:0.8.1]
    ! at com.fun.myapp.LocalDateTimeParam.<init>(LocalDateTimeParam.java:20) ~[classes/:na]
    ! at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_45]
...
...
Causing: org.glassfish.hk2.api.MultiException: A MultiException has 3 exceptions.  They are:
! 1. javax.ws.rs.WebApplicationException: HTTP 400 Bad Request
! 2. java.lang.IllegalArgumentException: While attempting to resolve the dependencies of com.fun.myapp.PaginationFilters errors were found
! …
Run Code Online (Sandbox Code Playgroud)

java jax-rs dropwizard jersey-2.0

12
推荐指数
1
解决办法
7034
查看次数