标签: jersey-2.0

两个具有相似 @Path 注释的资源类上的 Jersey 404

我有一个 RESTful Web 服务,使用 Drop Wizard 0.8.5 和 Jersey 2.21。我有一个资源类,其注释为:

@Path("/mysite/somepath")

这个类包含各种方法,例如@GETs、@PUTS等,都工作得很好。

现在,我有另一个用@Path("/mysite"). 在此资源类中,我需要添加一些用路径注释的方法,如下所示:

@Path("/somepath/dothis")
@Path("/somepath/dothat")
Run Code Online (Sandbox Code Playgroud)

资源类都注册得很好。然而,当我调用第二个类时,我得到了 404,因为泽西岛似乎正在我的第一个类中寻找这些方法。除了更改我的 @Path 注释以避免这种命名冲突之外,还有其他方法可以解决此问题吗?

java rest jersey dropwizard jersey-2.0

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

当泽西岛发生 500 服务器错误时,如何获取堆栈跟踪?

在球衣服务器中时,出现服务器 500 错误:

\n\n
    \n
  • 在服务器响应中,不\xc2\xb4t 有堆栈跟踪或一些信息。

  • \n
  • 在 Eclipse 控制台中,don\xc2\xb4t 有异常堆栈跟踪

  • \n
\n\n

我尝试捕获服务器中的异常并在控制台中打印跟踪,但没有任何反应

\n\n

发生 500 服务器错误时如何获取堆栈跟踪?

\n

grizzly maven jersey-2.0

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

org.glassfish.jersey.internal.util eclipse Maven Webapp 项目中缺少 Base64 类

请找到从 eclipse 获取的屏幕截图

任何帮助!我知道有很多选择,但有点困惑为什么它现在被排除在外!

java jax-rs jersey-2.0

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

使用自定义验证组的自定义约束注释导致 E2E 测试中的 java.lang.ArrayStoreException

我正在为我的 REST 应用程序编写 E2E 测试。因此,位于前端的测试调用已部署的后端,除了一个小问题之外,这一切工作得很好:当调用readEntity接收到的方法时Responsejava.lang.ArrayStoreException会发生一个。我的观察表明问题出在自己编写的约束注释中:

@Future我已经为 Bean 验证编写了自己的约束注释,我的 POJO 使用此注释来验证 aLocalDateTime是否在将来。我还提供了两个简单的接口,用作验证组:

public interface ExistingInstance extends Default {

}
Run Code Online (Sandbox Code Playgroud)

public interface NewInstance extends Default {

}
Run Code Online (Sandbox Code Playgroud)

当我在自定义约束注释中使用这些接口之一作为验证组时,如下所示:

public class Book {

   @Future(groups=NewInstance.class)
   private LocalDateTime validFrom;

   private LocalDateTime validTo;

   // Getters & Setters...
}
Run Code Online (Sandbox Code Playgroud)

我收到此异常:

java.lang.ArrayStoreException
    at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:736)
    at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:543)
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:367)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:298)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:132)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:84)
    at java.lang.reflect.AccessibleObject.getAnnotationsFromCache(AccessibleObject.java:313)
    at java.lang.reflect.Field.declaredAnnotations(Field.java:1167)
    at java.lang.reflect.Field.getDeclaredAnnotations(Field.java:1160)
    at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector._findFields(AnnotatedFieldCollector.java:86)
    at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector._findFields(AnnotatedFieldCollector.java:71)
    at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector.collect(AnnotatedFieldCollector.java:48)
    at com.fasterxml.jackson.databind.introspect.AnnotatedFieldCollector.collectFields(AnnotatedFieldCollector.java:43) …
Run Code Online (Sandbox Code Playgroud)

java reflection jackson bean-validation jersey-2.0

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

球衣应用中的测微仪 Prometheus 指标(非弹簧)

我有一个带有 Jersey REST 端点的 Web 应用程序(war)。我正在与普罗米修斯/千分尺集成以生成指标。我在这里公开了“/metrics”端点

@Path("/metrics")
public class Metrics {
    private static final PrometheusMeterRegistry prometheusRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);

    static {
        new JvmGcMetrics().bindTo(prometheusRegistry);
        new JvmMemoryMetrics().bindTo(prometheusRegistry);
        new JvmCompilationMetrics().bindTo(prometheusRegistry);
        new JvmThreadMetrics().bindTo(prometheusRegistry);
    }
    @GET
    public String getMetrics() {
        return prometheusRegistry.scrape();
    }
}
Run Code Online (Sandbox Code Playgroud)

我被困在如何生成 http 请求指标上。我找不到任何与获取这些指标相关的代码。有人可以帮我吗?

java jersey-2.0 prometheus micrometer

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

Grizzly Embedded Server + Jersey服务+ Servlet过滤器

以下代码运行我的REST服务,但我的servlet过滤器永远不会被调用.有任何想法吗?

WebappContext webappContext = new WebappContext("grizzly web context", "");

FilterRegistration testFilterReg = webappContext.addFilter("TestFilter", TestFilter.class);
testFilterReg.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), "/*");

ResourceConfig rc = new ResourceConfig().register(MyResource.class);
HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create("http://localhost:8080/myapp/"), rc);
webappContext.deploy(httpServer);
Run Code Online (Sandbox Code Playgroud)

java grizzly servlet-filters jersey-2.0

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

带有FormDataContentDisposition的org.glassfish.jersey上传文件

http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/ 我正在按照本指南操作并遇到问题.我有一些问题.

  1. 所有的依赖都必须对应吗?我的项目有一些org.glassfish.jersey依赖项,本指南建议使用org.sun.jersey.我是否必须使用与此相同的版本进行更改?

    <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.16</version>
    </dependency>
    <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.16</version>
    
    Run Code Online (Sandbox Code Playgroud)

  2. 我有这个错误

    org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization. [[FATAL] No injection source found for a parameter of type public ***.***.****.common.dto.response.AbstractResponse ***.***.****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService.upload(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class ***.***.****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@90516e]}, definitionMethod=public ***.***.***.common.dto.response.AbstractResponse ***.***.*****.m2m.instancetypeupload.webservice.InstanceTypeUploadWebService.upload(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition), parameters=[Parameter [type=class java.io.InputStream, source=file1, defaultValue=null], Parameter [type=class org.glassfish.jersey.media.multipart.FormDataContentDisposition, source=file1, defaultValue=null]], responseType=class ***.***.***.common.dto.response.AbstractResponse}, nameBindings=[]}']
    
    Run Code Online (Sandbox Code Playgroud)

    这是我的网络服务

    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.APPLICATION_JSON)
    public AbstractResponse upload(@FormDataParam("file1") InputStream file1,
                               @FormDataParam("file1") FormDataContentDisposition filename1
                              ) …
    Run Code Online (Sandbox Code Playgroud)

java rest multipartform-data glassfish jersey-2.0

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

为什么在使用Java/Jersey返回404响应时会获得静态文本/ html?

我正在使用托管在Google App Engine上的Java,Jetty和Jersey 2.18(现在最新).

假设我有这样的服务

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{userId}")
public Response getUser(@PathParam("userId") String userId)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我做:

    return Response.ok()
            .entity(user)
            .build();
Run Code Online (Sandbox Code Playgroud)

我正确地收到了application/json内容类型和正文.但当我这样做时:

    return Response
            .status(404)
            .entity(new ResponseModel(100, "user not found"))
            .build();
Run Code Online (Sandbox Code Playgroud)

与返回任何4XX或5XX状态相同,我收到text/html内容类型以及此HTML正文:

<html>
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>404 Not Found</title>
  </head>
  <body text=#000000 bgcolor=#ffffff>
    <h1>Error: Not Found</h1>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

而不是我放入的对象.entity()

编辑:这是我的web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app
    version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.mypackage.services;org.codehaus.jackson.jaxrs</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>
                org.glassfish.jersey.server.gae.GaeFeature;
                org.glassfish.jersey.server.mvc.jsp.JspMvcFeature;
                org.glassfish.jersey.media.multipart.MultiPartFeature;
            </param-value> …
Run Code Online (Sandbox Code Playgroud)

java google-app-engine jersey jersey-2.0

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

将InboundJaxrsResponse转换为json字符串

我正在尝试将jax-rs响应序列化为json字符串.

来自服务器的响应是json,我从泽西客户端获得它:

Response resp = target.request().method("PUT", Entity.json(payloadBean))
Run Code Online (Sandbox Code Playgroud)

其中payloadBean是我的json请求.一切正常但我无法转换json字符串中的resp以便记录它.

如果我尝试:

String s = EntityUtils.toString((HttpEntity) resp.getEntity());
Run Code Online (Sandbox Code Playgroud)

我明白了:

org.glassfish.jersey.client.internal.HttpUrlConnector cannot be cast to org.apache.http.HttpEntity
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果我没有强制转换为HttpEntity,编译器说:

toString (org.apache.http.HttpEntity) in EntityUtils cannot be applied to (java.lang.Object).
Run Code Online (Sandbox Code Playgroud)

我的相关进口是:

import org.apache.http.HttpEntity;
import org.apache.http.util.EntityUtils;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

jax-rs jersey-2.0 javax.ws.rs

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

泽西岛:以JSON格式读取上传的文件

我可以通过以下方式在jersey中上传文件:

@POST
    @Consumes( MediaType.MULTIPART_FORM_DATA)
    public void indexFile(
            @FormDataParam("file") InputStream uploadedFile,
            @FormDataParam("file") FormDataContentDisposition fileInfo){
        System.out.println(fileInfo.getFileName());
        DAO.indexFileToSolr(uploadedFile);
    }
Run Code Online (Sandbox Code Playgroud)

这给了我该文件作为输入流。该文件包含以下格式的json对象数组:

[
    {
        id: 1,
        title: "someTitle"
    }
]
Run Code Online (Sandbox Code Playgroud)

我也有一个POJO / Java类,代表该对象,如下所示:

@XmlRootElement
public class MyObj{
    private int id;
    private String title;

   //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

jersey-media-moxy用来在传入请求或传出响应时自动在POJO和JSON / XML之间进行转换。(我不需要为此编写任何代码,我只需要指定请求将为JSON格式,或者响应应为JSON,并且序列化/反序列化由处理即可jersey-media-moxy。)

问题是,我无法在文件上载方法中指定此行为,我看不到告诉jersey或jersey-media-moxy将文件序列化为Java对象的方法。

我找不到任何方法jersey-media-moxy来实际读取InputStream并将其序列化为POJO。

注意:我可能可以jackson用来读取json文件并创建Java对象列表,但我不太愿意这样做,因为首先需要另一个库(如果我可以使用jersey-media- Mosy),其次,我不确定是否可以通过简单的方式告诉泽西文件此文件包含Json对象,因此请对其进行反序列化。

java json jersey-2.0

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