我正在尝试POST一个List自定义对象.请求正文中的我的JSON是这样的:
{
"collection": [
{
"name": "Test order1",
"detail": "ahk ks"
},
{
"name": "Test order2",
"detail": "Fisteku"
}
]
}
Run Code Online (Sandbox Code Playgroud)
处理请求的服务器端代码:
import java.util.Collection;
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.MediaType;
import javax.ws.rs.core.Response;
@Path(value = "/rest/corder")
public class COrderRestService {
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response postOrder(Collection<COrder> orders) {
StringBuilder stringBuilder = new StringBuilder();
for (COrder c : orders) {
stringBuilder.append(c.toString());
}
System.out.println(stringBuilder);
return Response.ok(stringBuilder, MediaType.APPLICATION_JSON).build();
}
}
Run Code Online (Sandbox Code Playgroud)
实体COrder:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class …Run Code Online (Sandbox Code Playgroud) 我是RESTful球衣的新手.我想问一下是什么之间的不同@PathParam,并@QueryParam在球衣?
任何人都可以向我解释一下JAX-RS Provider是什么以及'@Provider'注释的作用是什么?我一直在阅读文档,但我无法得到它.
如果有资源类为传入请求提供服务,那么提供商会做什么?当我创建一个持久资源类(不是每个请求的那个)时,它们与单例资源类有什么不同?或者那些类也是提供者?
在阅读了一些关于JAX-RS和JAX-WS的文章之后,我有几个问题需要确认?
我正在构建一个通用的Web服务,需要将所有查询参数都抓取到一个字符串中以便以后解析.我怎样才能做到这一点?
我真的不明白什么是球衣..
我所知道的是Jax-RS是一个用于构建REST Web服务的API,还有jersey?我得到了一些信息并且都说了同样的话:"球衣是Jax-RS的实现".但它意味着什么?
如果jax-rs是一个API,为什么我们需要jersey来创建一个休息Web服务?运动衫是否有更多的lib与jax-rs瞄准?如果是的话,jax-rs是一个不完整的API?
对不起,这个问题听起来很愚蠢,但在使用Jersey开发我的一些RESTful服务后,我问自己一个问题 - 如果REST只是一个架构,而不是像SOAP这样的协议,为什么我们需要像JAX-RS这样的规范?
我实际上搜索了诸如"通过HTTP在servlet和RESTful服务之间有什么区别"之类的问题,并总结了社区的答案,我得到了:
根据这些答案,我想如果我编写一个使用JAXB的servlet(用于处理自动序列化),并且我在servlet代码中有效地使用GET/POST/PUT/DELETE,我不使用像Jersey这样的工具,因此JAX-RS.
我知道通过这个声明我非常错误,请纠正我.
PS:当我不得不在PHP中开发一些RESTful服务时,实际上出现了这种疑问.在继续浏览一些RESTful PHP代码之后,我意识到它们只是相同的旧PHP脚本,并且有一些辅助方法来处理XML/JSON.
我目前正在寻找为基于Web服务的JAX-RS(基于REST的Web服务的Java API)创建自动化测试的方法.
我基本上需要一种方法来发送它某些输入并验证我得到了预期的响应.我宁愿通过JUnit这样做,但我不确定如何实现.
您使用什么方法来测试您的Web服务?
更新:正如entzik指出的那样,将Web服务与业务逻辑分离后,我可以对业务逻辑进行单元测试.但是,我还想测试正确的HTTP状态代码等.
是否可以仅使用注释设置JAX-RS应用程序?(使用Servlet 3.0和JAX-RS Jersey 1.1.0)
我试过,没有运气.web.xml似乎需要使用一些.
配置A(工作,但具有web.xml配置)
web.xml中
...
<servlet>
<servlet-name>org.foo.rest.MyApplication</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>org.foo.rest.MyApplication</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
...
Run Code Online (Sandbox Code Playgroud)
Java的
@ApplicationPath("/")
public class MyApplication extends Application {
...
}
Run Code Online (Sandbox Code Playgroud)
配置B(不工作,抛出异常)
@ApplicationPath("/")
@WebServlet("/*") // <--
public class MyApplication extends Application {
...
}
Run Code Online (Sandbox Code Playgroud)
后者似乎坚持认为Application将是Servlet的子类(例外不会留下任何猜测)
java.lang.ClassCastException: org.foo.rest.MyApplication cannot be cast to javax.servlet.Servlet
Run Code Online (Sandbox Code Playgroud)
问题
为什么web.xml定义有效,但注释没有?有什么不同?
有没有办法使它工作,例如有一个没有web.xml的JAX-RS应用程序?
我刚刚听说过Apache Wink,我想知道它与Jersey或JBoss RESTEasy相比有什么不同.在其他两个不能做的事情中可以做些什么?
我们一直在使用Jersey进行一些内部项目,主要是因为它的简单性,但我无法弄清楚是什么让其他两个更好,我会考虑切换.有没有人有任何用例,其中每个填充利基?
jax-rs ×10
java ×6
jersey ×6
rest ×3
resteasy ×2
web-services ×2
apache ×1
jackson ×1
java-ee ×1
jax-ws ×1
junit ×1
servlet-3.0 ×1
soap ×1
spring ×1
unit-testing ×1