我正在使用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) 我已经开发了JAX-RS REST应用程序,并且我已经生成了WADL.如何找到WADL的位置?
例如在Jax-ws中可以使用类似[http://192.168.1.39:8083/application/ApplicationService?wsdl]的URL查找wsdl
就像那样如何在JAX-RS中找到位置WADL.
我正在尝试@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) 我将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)
有没有一种方法可以从客户端跟踪时间并进行记录?
我正在使用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) 在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) 我正在使用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) 所以我明白你是在指定类型,但为什么呢?在什么条件下会很重要.例如,如果我有以下方法,并且我注释掉@Produces注释,它仍然返回JSON.
@GET
@Path("/json")
//@Produces({MediaType.APPLICATION_JSON})
public String getJson(){
return toJson(getResults());
}
Run Code Online (Sandbox Code Playgroud)
API文档说'如果没有指定,那么容器将假定可以生成任何类型.' 那么为什么我不想让容器承担这个呢?
是否可以在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)
此标头将由客户端上的拦截器添加,因此客户端代码不知道放在此处的内容,这不应该是显式方法参数.
我正在为我的应用程序编写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)
这是最佳做法/适当吗?它将如何知道调用哪种方法?
提前感谢您的任何澄清.
jax-rs ×10
java ×7
rest ×7
jersey ×4
cxf ×2
java-ee ×2
api ×1
guice ×1
http-headers ×1
jersey-2.0 ×1
moxy ×1
regex ×1
restlet ×1
slf4j ×1
web-services ×1