Tag: jax rs

将@Context UriInfo解析为java线程

我正在尝试将@Context UriInfo解析为另一个线程并执行一些任务。 但是当我尝试运行它时,它会给出错误 Exception in thread “Thread-691” org.jboss.resteasy.spi.LoggableFailure: Unable to find contextual data of type: javax.ws.rs.core.UriInfo 我的代码如下 @GET @Path(“/thread”) public void thread(@Context UriInfo url){ Runnable run = new Runnable() { @Override public void run() { System.out.println(“>>>>>>>>>>>> ” + url.getRequestUri().getQuery()); } }; Thread t = new Thread(run); t.start(); } 如何将UriInfo添加到新线程?

如何将多部分表单数据从jsp发送到Web服务?

我正在尝试为我的网站创建一个注册页面。 当用户将数据提交到signup.jsp时,我想使用“application / x-www-form-urlencoded”将此数据发送到我的Web服务。 我怎么能在JSP中做到这一点。 试过以下代码,但这会以原始数据的forms发送数据。

MessageBody Writer / Reader

我试图让Jersey支持GSON ,为此我已经读过我需要实现自定义MessageBodyWriter和MessageBodyReader 。 现在我的问题是我找不到这两个接口的任何明确定义。 从文档: public interface MessageBodyWriter 支持将Java类型转换为流的提供程序的合同。 要添加MessageBodyWriter实现,请使用@Provider注释实现类。 MessageBodyWriter实现可以使用Produces注释,以限制它被认为适合的媒体类型。 和 public interface MessageBodyReader 支持将流转换为Java类型的提供程序的合同。 MessageBodyReader实现可以使用Consumes注释,以限制它被认为适合的媒体类型。 实现MessageBodyReader契约的提供者必须以编程方式在JAX-RS运行时中注册,或者必须使用@Provider注释进行注释,以便在提供者扫描阶段由JAX-RS运行时自动发现。 任何人都能解释一下具体意味着什么吗? 为什么我需要在GSON支持的情况下实现它们? 谢谢。

Jetty服务器配置

我使用Jetty 9并且在配置方面存在一些问题。 我简单的REST工作正常。 但是当我尝试向所有请求和error handling程序添加新标头时,问题就开始了。 我只能通过将此代码添加到每个响应来处理标头: return Response.ok(murals) .header(“Access-Control-Allow-Origin”, “*”) .header(“Access-Control-Allow-Methods”, “GET, POST, DELETE, PUT”) .build(); 服务器配置: Server server = new Server(9998); ServletContextHandler servletContextHandler = new ServletContextHandler(server, “/”, ServletContextHandler.SESSIONS); servletContextHandler.addFilter(GuiceFilter.class, “/*”, EnumSet.allOf(DispatcherType.class)); servletContextHandler.addServlet(DefaultServlet.class, “/”); ResourceConfig rc = new ResourceConfig() .register(FilterHeaders.class) .register(ExceptionNotFound.class) .register(CORSFilter.class); //doesnt work new ServletHolder(new ServletContainer(rc)); HandlerWrapper han = new HandlerWrapper(); han.setHandler(new AbstractHandler() { […]

JAX-RSexception:使用资源的GET进行批注,类不被视为有效的资源方法

我正在使用JAX-RS的平针织实现来进行Web服务。 我是这个JAX-RS的新手。 我试图在服务中添加一个方法,该方法接受一个Employee对象,并根据Employee对象值返回雇员Id(为此有一个DB命中)。 遵循Restful原则,我将方法设为@GET并提供了url路径,如下所示: @Path(“/EmployeeDetails”) public class EmployeeService { @GET @Path(“/emp/{param}”) public Response getEmpDetails(@PathParam(“param”) Employee empDetails) { //Get the employee details, get the db values and return the Employee Id. return Response.status(200).entity(“returnEmployeeId”).build(); } } 出于测试目的,我写了这个客户端: public class ServiceClient { public static void main(String[] args) { ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource […]

如何在JAX-RS中过滤具有无效参数的请求?

“无效”是指不期望的参数。 例如: @Path(“/”) public interface ExampleInterface { @GET @Path(“/example”) public Response test( @QueryParam(“param1”) String param1, @QueryParam(“param2″) String param2 ); } 然后我称之为”…/example?param3=foo”

如何定义在JEE中处理多部分数据的JAX-RS服务?

这是我到目前为止: 这初始化了我的REST服务 package com.dothatapp.web.rest; import javax.servlet.annotation.MultipartConfig; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath(“/authed/rest”) public class JaxRsActivator extends Application { } 这就是我的服务: import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriInfo; import org.json.JSONObject; @Path(“fileupload”) public class FileUpload { @Context private UriInfo context; @POST @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.APPLICATION_JSON) public JSONObject doUpload(@Context HttpServletRequest obj) { […]

将LinkedHashMap 转换为Java中的对象

我将直接从我的问题开始,然后我会提供更多背景信息。 简单 :我有一个LinkedHashMap ,它代表一个特定的对象。 将它转换为该对象的最佳方法是什么? 我知道您可以使用generics来遍历所有元素并设置字段,但什么是嵌套对象? 背景 :我有一个消耗JSON对象的JAX-RS服务。 我的服务处理不同类型的对象,只代表一个接口。 所以我不知道哪些对象来自外部以及哪个程序正在使用我的服务。 在运行时,我通过我的界面上的@Inject获取信息。 JAX-RS服务将来自客户端的数据存储在无类型的Object中,并自动完成(即LinkedHashMap )。 使用我的界面,我想提供一个类似setObject的方法,参数应该是该类型的对象。 我可以处理所有这些,但不是我将Object LinkedHashMap转换为该特定对象的部分。 示例结构 :目标对象可能是这样的 public class Document { private String title; private String id; private int version; } LinkedHashMap看起来像那样 {title=some title, id=1, version=1}

使用Jersey和@ApplicationPath批注加载资源

我正在尝试在没有web.xml的情况下将基本的泽西式restful服务部署到Tomcat7: @WebServlet(loadOnStartup=1) @ApplicationPath(“resources”) @Path(“/mypath/{name}”) public class MyResource extends Application { @Override public Set<Class> getClasses() { Set<Class> s = new HashSet<Class>(); s.add(MyResource.class); return s; } @GET @Consumes(“text/plain”) @Produces(“text/plain”) public String getWelcome(@PathParam(value = “name”) String name) { return “Welcome to jax-rs ” + name; } } 尝试访问时,我遇到了404: / myapplication / resources / mypath / sample 。 我可以使用@WebServlet注释部署servlet,因此这与将没有web.xml的servlet加载到Tomcat7中无关。 […]

为什么要使用REST @Produces注释

所以我明白你是在指定类型,但为什么呢? 在什么条件下才重要。 例如,如果我有以下方法,并且我注释掉@Produces注释,它仍然返回JSON。 @GET @Path(“/json”) //@Produces({MediaType.APPLICATION_JSON}) public String getJson(){ return toJson(getResults()); } API文档说’如果没有指定,那么容器将假定可以生成任何类型。’ 那么为什么我不想让容器承担这个呢?