我正在使用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) 我创建了一个在本地实现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) 我有Web容器和Tomcat的知识,可以部署静态和动态网站.但我是REST和泽西新手.我已阅读2.6用户指南,查看了许多网站和YouTube视频.在1.x Jersey上似乎有很多信息,但在2.x上没有太多信息我可以在我的环境中使用1.18,但似乎无法使任何部署模型适用于2.x. 我在2.x中注意到有一个应用程序部署模型.所以我想我会问一些非常通用的问题来开始.
谢谢
我有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) 我有一个基于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的神秘内容,但没有一个看起来像是为参数赋值,所以我并不积极如何我会用它.
如何将该值传递给该参数?
我正在使用Jersey 2.6实现REST Web服务,
我在注册Jackson提供程序以获得JSON支持时遇到了麻烦,我已经根据jeresy文档(https://jersey.java.net/documentation/2.6/user-guide.html#json.jackson)实现了.
参考:http: //blog.dejavu.sk/2013/11/19/registering-resources-and-providers-in-jersey-2/
由于某种原因杰克逊JSON提供商没有注册,我错过了什么?
如何在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) 我在球衣测试框架上遇到了一些问题.如果我使用@Before和@After注释,则target方法抛出NullPointerException.我认为JerseyTest适用于JUnit?我的问题在哪里?
代码失败:
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) 我们正在使用弹簧4,嵌入式码头9和平针织物的服务器上工作.最近,我们搬到了球衣2.13,我们注意到性能下降.我使用YourKit进行了一些调查.我看到在球衣的反射中有大量的CPU使用率.此外,还有许多NoSuchMethodExceptions
和ClassNotFoundExceptions
Youkit快照.
是否有任何球衣配置或最佳做法可以避免这个问题,或优化球衣?或者这可能是球衣2中的一个已知问题?
以下是YourKit的两个截图,显示了排除套接字read(java.net.SocketInputStream.socketRead0
)后的热点.第一个是Merged Callees:
第二个是Back Trace:
谢谢.
注意:有关重现此问题的所有代码,请访问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格式或无效"
几个问题:
这是请求时生成的堆栈跟踪(不将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) jersey-2.0 ×10
java ×8
jax-rs ×2
jersey ×2
rest ×2
spring ×2
tomcat7 ×2
ajax ×1
asynchronous ×1
dropwizard ×1
grizzly ×1
jackson ×1
jquery ×1
json ×1
junit ×1
junit4 ×1
overriding ×1
tomcat ×1
tomcat8 ×1