Tag: jax rs

将Google原型缓冲区与Jersey / JAX-RS相结合

目前我有一个RESTful Web服务,其端点通过Jersey / JAX-RS公开: @Path(“/widgets”) public class WidgetResource { @GET List getAllWidgets() { // gets Widgets somehow } @POST Widget save(Widget w) { // Save widget and return it } } 我使用Jackson将我的POJO序列化/反序列化为JSON,我的服务都响应并将我的POJO作为application/json发回。 我现在希望可能使用Google协议缓冲区(或等效技术)来帮助压缩/优化客户端和服务之间的通信,因为JSON /文本相当庞大/浪费。 实际上,我有一个由“微服务”架构组成的大型后端; 数十种REST服务相互通信; 这就是为什么我希望优化在所有这些之间来回发送的消息。 所以我问:是否仍然可以让Jersey / JAX-RS提供我的服务端点,但要删除Jackson / JSON的内容并用Google协议缓冲区替换它? 如果是这样,这段代码可能是什么样的?

通过GenericEntity <List >在RESTful Response对象中使用Java-generics模板类型

我有一个通用的JAX-RS资源类,我已经定义了一个通用的findAll方法 public abstract class GenericDataResource { @GET @Produces(MediaType.APPLICATION_JSON) public Response findAll() { Query query = em.createNamedQuery(modelClass.getSimpleName()+”.findAll”); List list = query.getResultList(); return Response.ok(new GenericEntity<List>(list) {}).build(); } } 和用户类: public class User extends GenericModel { … } 这里是示例子类定义: @Path(“users”) public class UserResource extends GenericDataResource { public UserResource() { super(User.class); } } 我得到以下exception: com.sun.jersey.api.MessageException: A message body writer […]

JAX-RS中QueryParam和MatrixParam有什么区别?

JAX-RS @QueryParam和@MatrixParam什么@MatrixParam ? 从文档中,queryparam和matrixparam都可以在一个特殊条件下定位一个资源。 那么用例区别是什么? PS: Queryparam: url ? key=value; Matrixparam url; key=value;

Java Rest Jersey:发布多种类型的数据(文件和JSON)

我有一个Jersey REST服务,将发布数据。 将有一个CSV文件,它是该CSV的实际数据和一些元数据(元可以是JSON或XML格式)。 如果需要发布这两个方法,那么方法签名和附加注释应该如何发布,如果它是…… @POST @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces({MediaType.APPLICATION_JSON}) public CreateTaskVO provideService(@FormParam(“meta”) String v1, @FormParam(“data”) InputStream v2) { 在这里,我设想第一个参数是元数据的JSON字符串,第二个参数是实际数据的输入流。 这会有用吗?

JAX-RS 2打印JSON请求

我希望能够从请求中打印JAX-RS 2 JSON有效负载,无论我的应用服务器上的实际实现如何。 我在SO上尝试了建议的解决方案,但都包含了实际实现中的二进制文件(如Jersey等),我只允许在我的应用程序中使用javaee-api v 7.0。 我尝试在我的客户端上实现ClientRequestFilter和ClientResponseFilter,但它们不包含序列化实体。 这是客户的一个例子: WebTarget target = ClientBuilder.newClient().register(MyLoggingFilter.class).target(“http://localhost:8080/loggingtest/resources/accounts”); Account acc = target.request().accept(MediaType.APPLICATION_JSON).get(account.Account.class); 这是MyLoggingFilter的实现: @Provider public class MyLoggingFilter implements ClientRequestFilter, ClientResponseFilter { private static final Logger LOGGER = Logger.getLogger(MyLoggingFilter.class.getName()); @Override public void filter(ClientRequestContext requestContext) throws IOException { LOGGER.log(Level.SEVERE, “Request method: {0}”, requestContext.getMethod()); } @Override public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException […]

Jersey REST Server:实例化资源类

Jersey REST服务器[1]上的一个教程说明了Jersey servlet: 此servlet分析传入的HTTP请求,并选择正确的类和方法来响应此请求。 此选择基于类和方法中的注释。 当servlet“选择正确的类和方法”时,它是否每次都重新实例化该类? 或者它是否保留每个资源类的一个实例? 这似乎很重要,因为如果这些资源类具有对存储应用程序范围状态的对象的引用,则这些状态对象将与资源一起重新实例化,并且不会最终正确地存储状态数据。 [1] http://www.vogella.com/articles/REST/article.html#restjersey

Jersey解析Java 8日期时间

这是我的用户类,我在数据库中保存ISO兼容日期时间。 public class User { @Id private String id; private String email; @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) private LocalDateTime loginDate; } 这是我的泽西控制器: @POST @Consumes(“application/json”) @Produces(“application/json”) public Response create( User user) { Map apiResponse = new HashMap(); Map response = new HashMap(); user = (User) userService.create(user); } 我怎样才能在运动衫中使用像这样的日期时间格式? 是否可以自动发送datatime String并创建Java 8日期时间对象? { “email” : “imz.mrz@gmail.com” “loginDate” : “2015-04-17T06:06:51.465Z” […]

org.glassfish.jersey.internal.RuntimeDelegateImpl未找到

我正在为我的项目使用jersey并且要从字符串中解析URI。 UriBuilder.fromUri(“http://localhost:8000”).build(); 代码很简单,但我在下面收到错误 java.lang.ClassNotFoundException: org.glassfish.jersey.internal.RuntimeDelegateImpl 似乎该程序找不到代表。 我已经导入了javax.ws.rs.core.UriBuilder并且拥有应该在我的构建路径中包含委托的jersey-common 2.0 。 但我仍然得到这个错误。 有人知道如何解决它吗? 谢谢!

在Application中获取ServletContext

你能解释一下如何在我的Application的子类中获取ServletContext实例吗? 可能吗? 我试着像在下面的代码片段中那样做,但似乎没有用 – ctx没有设置: import javax.ws.rs.core.Application; import javax.ws.rs.core.Context; //… @ApplicationPath(“/”) public class MainApplication extends Application { @Context ServletContext ctx; @Override public Set<Class> getClasses() { Set<Class> classes = new HashSet<Class>(); //… return classes; } } web.xml中: environment development jersey-filter org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application my.MainApplication … 问题是我需要从中获取上下文参数。 如果有另一种方式,如果有人提示,我将不胜感激。 我理解Context注释可能不是为此而设的。 实际上,我不需要ServletContext本身。 如果我只能从web.xml获取上下文参数,我会非常高兴。 这是我真正需要的一个例子: import java.util.HashSet; import java.util.Set; import javax.servlet.ServletContext; […]

我如何使用jax-rs发送文件

如何使用jax-rs发送文件进行下载?