文武双全的足球 · ASP.NET Core 搭配 Nginx ...· 3 月前 · |
火爆的香瓜 · qt graphics framework ...· 4 月前 · |
直爽的上铺 · SSIS之Foreach循环容器应用 - ...· 5 月前 · |
不拘小节的酸菜鱼 · python ...· 7 月前 · |
潇洒的蚂蚁 · 【功能发布】Excel集成网页控件,内嵌于E ...· 7 月前 · |
我正在使用泽西岛开发REST实现。对于
PATCH
(部分更新),我已经实现了自己的
PATCH
自定义实现,因为泽西不支持它。
现在,我正试图弄清楚如何围绕该实现编写功能测试。我正在为其他方法(
PUT
、
POST
、
GET
、
DELETE
)使用jersey测试框架,这些方法在该框架中提供了这种支持。
有什么方法可以扩展jersey测试框架实现来编写
PATCH
的功能测试呢?如果没有,我是否可以使用其他测试框架来测试泽西
PATCH
实现?
如果有人能提供任何例子,那就太好了。
发布于 2015-04-08 01:39:00
假设您的实现由这样的自定义注释组成
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.ws.rs.HttpMethod;
@HttpMethod("PATCH")
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PATCH {}
试图用
Client
来做这样的事情
String response = target.request().method("PATCH", Entity.text("Hello"), String.class);
默认情况下不支持,并且将出现类似的异常
java.net.ProtocolException: Invalid HTTP method: PATCH
这不是
Client
API的直接问题,而是低级Java的问题。似乎是某种安全限制。
使用客户端API,我们可以通过设置一个属性来覆盖它。
在
JerseyTest
中,配置
Client
的一种方法是重写
configureClient
,并使用
ClientConfig
设置属性。您也可以轻松地在
Client
本身上设置属性,但是保持
JerseyTest
框架的精神(在这里我们不需要显式地访问
Client
,下面的示例将只是重写方法)
public class PatchTest extends JerseyTest {
@Path("patch")
public static class PatchResource {
@PATCH
@Produces(MediaType.TEXT_PLAIN)
public String getPatch(String request) {
return "Patched " + request;
@Override
protected void configureClient(final ClientConfig config) {
config.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
@Override
public Application configure() {
return new ResourceConfig(PatchResource.class);
@Test
public void doPatchTest() {
WebTarget target = target("patch");
String response = target.request().method("PATCH", Entity.text("Hello"), String.class);
Assert.assertEquals("Patched Hello", response);
System.out.println(response);
}
发布于 2016-03-29 16:20:30
要通过
HTTP PATCH
发送
JAX RS Client API
而不需要任何额外的配置:
client.target("$baseUrl$restUsersUrl/$userId")
.request("application/json")
.build("PATCH", Entity.entity(json2Update, MediaType.APPLICATION_JSON))
.invoke()
发布于 2017-11-19 20:11:44
注释
@PATCH
现在可以在JAX-RS2.1中使用。您可以在服务器端实现此HTTP方法,如:
@PATCH