标签: jax-rs

来自Basics的Jersey教程

我正在使用Jersey 1.8,我所指的教程很安静.什么都行不通.我指的是这里给出的教程

并获得一个未找到的类异常.根据教程,我创建了Java类,并配置了我的web.xml.它向我展示了一个例外,我没有办法解决这个问题.我想有一个完整的泽西实施最新教程.如果有一些东西比泽西的REST实施更好,请建议.我已经开始使用基于REST的Web服务了,如果你可以建议我从哪里开始(我只对REST感兴趣),我将不胜感激.下面是我用eclipse编写和编译的代码.

Hello.java

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class Hello {

    //This method prints the Plain Text
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayPlainTextHello()
    {
        return "Hello Jersey";
    }

    //This is the XML request output

    @GET
    @Produces(MediaType.TEXT_XML)
    public String sayXMLHello()
    {
        return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
    }

    //This result is produced if HTML is requested

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHTMLHello()
    {
        return "<html> " + "<title>" + "Hello Jersey" + …
Run Code Online (Sandbox Code Playgroud)

java rest jax-rs jersey java-ee

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

WADL位置:如何在JAX-RS应用程序中找到WADL位置?

我已经开发了JAX-RS REST应用程序,并且我已经生成了WADL.如何找到WADL的位置?

例如在Jax-ws中可以使用类似[http://192.168.1.39:8083/application/ApplicationService?wsdl]的URL查找wsdl

就像那样如何在JAX-RS中找到位置WADL.

jax-rs

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

jax-rs Jersey @Post Response实体为空

我正在尝试@POST用户创建的对象,并获得一个响应,其中不同的用户创建的有效负载作为实体.虽然返回的对象存在并且已填充,但在客户端上它是空的.

客户端发送/服务器收到对象:

@XmlRootElement
public class TweetQuery {
    String query;
    List<TweetQueryTweet> tweets = new ArrayList<>();
    // setters and getters
}

public class TweetQueryTweet {
    private String id;
    private String text;
    // setters and getters
}
Run Code Online (Sandbox Code Playgroud)

服务器收到/客户端发送对象:

@XmlRootElement
public class TweetClusters {
    List<TweetCluster> tweetClusters = new ArrayList<>();
    // setters and getters
}

public class TweetCluster {
    List<String> labels = new ArrayList<>();
    List<String> docs = new ArrayList<>();
    // setters and getters
}
Run Code Online (Sandbox Code Playgroud)

客户(Arquillian)测试:

@Test
@RunAsClient
public void test01SeeSomething(@ArquillianResource URL deploymentUrl) throws ... { …
Run Code Online (Sandbox Code Playgroud)

java rest jax-rs jersey moxy

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

CXF日志响应时间

我将CXF和JAX-RS一起使用来构建RESTFul API,以为Web应用程序提供数据。我想知道是否可以记录请求X进入我的API,进行处理然后作为响应返回所花费的时间。

我已经将自己的CXF记录器定义为JAX-RS功能,因为<cxf:logging />有点太多了。话虽这么说,我知道有一个请求程序记录器和一个响应记录器。我的web应用实际上记录了所有的请求/响应,如下所示:

11-21 10:37:01,052 INFO  [-8080-exec-7] +- CXF Request  --  ID : [24], Address : [http://my.api.com], HTTP Method : [GET] @org.apache.cxf.interceptor.LoggingOutInterceptor
11-21 10:37:01,089 INFO  [-8080-exec-7] +- CXF Response  --  ID : [24], Response Code : [200]        @org.apache.cxf.interceptor.LoggingInInterceptor
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以从客户端跟踪时间并进行记录?

cxf jax-rs slf4j

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

Wildfly PathParam上的休息服务为空

我正在使用JEE 7构建一个REST服务并在WildFLy 8上部署它.一切似乎都应该正常工作,除非PathParam它不是.

我的代码如下:

web.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
</web-app>
Run Code Online (Sandbox Code Playgroud)

JaxRsActivator.java:

package nl.noread.tracker.rest;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/")
public class JaxRsActivator extends Application {
    /* class body intentionally left blank */
}
Run Code Online (Sandbox Code Playgroud)

UserService:

package nl.noread.tracker.rest;

import nl.noread.tracker.domain.Location;
import nl.noread.tracker.manager.LocationManager;
import nl.noread.tracker.manager.UserManager;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.websocket.server.PathParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Stateless
@LocalBean
@Path("/user")
public class UserService {

    @EJB
    private LocationManager locationManager;

    @EJB
    private UserManager userManager;

    @GET
    @Path("location/{id}")
    @Produces("application/json") …
Run Code Online (Sandbox Code Playgroud)

java rest jax-rs jersey java-ee

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

JAX-RS子资源和Guice注入

在JAX-RS Web应用程序中,我们使用子资源:

@Path("/some/things")
public class ThingsListResource {
    @Inject
    SomeStorage store;

    @GET
    public List<Thing> getAllThings() {
        return store.getAllThings();
    }

    @Path("{id}")
    public ThingResource getThingResource(@PathParam("id") String id) {
        return new ThingResource(id); // PROBLEMATIC
    }
}

public class ThingResource {
    @Inject
    SomeOtherDependecy dep;

    @Inject
    SomeStorage store;

    private final String id;

    public ThingResource(String id) {
        this.id = id;
    }

    @GET
    public Thing getThisThing() {
        return store.getThing(id);
    }

    @DELETE
    public void removeThisThing() {
        store.removeThing(id);
    }

    // following is a list of methods useful enough
    // to …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection jax-rs guice

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

使用Jersey在Restful Resource中使用多个@PathParams时没有发现注入源错误

我正在使用Rest/Jersey和Tomcat 7进行一个简单的Restful Web服务.如果我的所有Path都包含一个参数,那么工作正常.如果我包含一个使用多个参数的参数,当我尝试点击我的资源类支持的任何资源路径时,我会遇到"找不到注入源"错误 - 即使是之前正在工作的那些资源路径.如果我注释掉那段特定代码,那么我的所有其他路径都会按预期工作.但如果我取消注释掉那段代码,我就无法使用任何一条路径.

这是我的代码片段:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

// get all the information about a specific item
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public String getItem(@PathParam("id") String itemId)
{
    String answer = "{";
    answer += "\"itemid\":\"" + itemId + "\",";
    answer += "\"type\":0,";
    answer += "\"sector\":322948,";
    answer += "\"created\":53249098220";
    answer += "}";

    return answer;
}

// if I comment out this method, all is fine; 
// if I leave it in, error is thrown when …
Run Code Online (Sandbox Code Playgroud)

java rest jax-rs jersey jersey-2.0

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

为什么使用REST @Produces注释

所以我明白你是在指定类型,但为什么呢?在什么条件下会很重要.例如,如果我有以下方法,并且我注释掉@Produces注释,它仍然返回JSON.

@GET
@Path("/json")
//@Produces({MediaType.APPLICATION_JSON})
public String getJson(){
    return toJson(getResults());
}
Run Code Online (Sandbox Code Playgroud)

API文档说'如果没有指定,那么容器将假定可以生成任何类型.' 那么为什么我不想让容器承担这个呢?

java rest web-services jax-rs restlet

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

JAXRS CXF - 获取http标头而不指定方法参数

是否可以在JAXRS资源方法中检索http标头而无需将这些标头明确指定为方法参数?

例如,我有一个以下界面:

@Path("/posts")
public interface PostsResource {

  @GET
  public List<Post> getAllPosts();
}
Run Code Online (Sandbox Code Playgroud)

以及实现此接口的以下类:

public class PostsResourceImpl implements PostsResource {

  @Autowired
  private PostsService postsService;

  public List<Post> getAllPosts() {
    return postsService.getAllPosts();
  }

}
Run Code Online (Sandbox Code Playgroud)

我不想将我的方法签名更改为:

public List<Post> getAllPosts(@HeaderParam("X-MyCustomHeader") String myCustomHeader);
Run Code Online (Sandbox Code Playgroud)

此标头将由客户端上的拦截器添加,因此客户端代码不知道放在此处的内容,这不应该是显式方法参数.

java rest cxf jax-rs http-headers

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

Jax-RS重载方法/路径执行顺序

我正在为我的应用程序编写API,我对Jax-RS如何处理某些场景感到困惑

例如,我定义了两个路径:

@Path("user/{name : [a-zA-Z]+}")
Run Code Online (Sandbox Code Playgroud)

@Path("user/me")
Run Code Online (Sandbox Code Playgroud)

我指定的第一条路径明确包含第二条路径,因为正则表达式包括所有字母az.但是,该程序似乎没有问题.是因为它默认为最具体的路径(即/ me然后查找正则表达式)?

此外,如果我将两个正则表达式定义为具有一些重叠的路径会发生什么.是否有一个默认方法将被调用?

假设我想为三种不同的方法创建三个路径:

@Path{"user/{name : [a-zA-Z]+}")
@Path("user/{id : \\d+}")
@Path("user/me")
Run Code Online (Sandbox Code Playgroud)

这是最佳做法/适当吗?它将如何知道调用哪种方法?

提前感谢您的任何澄清.

regex api rest jax-rs

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