Jersey REST 服务中 DELETE 请求无法接收 entity body 作为参数

简介:

问题

在用 Jersey 构建 REST 服务时,当试图用 Ajax 传递一个 JSON 对象 作为参数执行 DELETE 方法时,后台接收到的对象为 null.

服务器的资源类写法为

@DELETE @Path("pojojson")
@Consumes(MediaType.APPLICATION_JSON)
public String deletePojoJsonBody(@QueryParam("name") String name ) {
 return "You delete " + name;
}

由下图,可以看到调用该接口时,接受到的参数为 null

原因

在新版的 HTTP 1.1 协议里面有如下描述:

A payload within a DELETE request message has no defined semantics; sending a payload body on a DELETE request might cause some existing implementations to reject the request.

中文意思是:

DELETE 请求消息中的 payload (metadata 和 body content) 没有定义语义;在DELETE 请求上发送一个 payload body 可能会导致一些现有的实现拒绝该请求。

即,不应该在 DELETE 请求中使用 entity body 来传递参数.

解决

修改代码,将参数写在 URI 里面即可:

@DELETE @Path("pojojson")
@Produces(MediaType.TEXT_PLAIN)
public String deletePojoJson(@QueryParam("name") String name ) {
 return "You delete " + name;
}

参考

目录
相关文章
|
10月前
|
JSON 数据格式
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
Nestjs(三)接收参数 @Query @Body @Param(post、get 、put、delete ...)
618 4
|
移动开发 Java
java发送post请求,使用multipart/form-data的方式传递参数
java发送post请求,使用multipart/form-data的方式传递参数
1538 0
|
10月前
|
Web App开发 前端开发 JavaScript
AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
92 0
|
Java Apache 网络架构
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)(上)
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)
|
前端开发 数据库
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS 在日常的前后端交互,数据请求中最长用的就是Ajax,当然在面试时也经常会被问道请求的方式有哪些?分别什么不同?一般我们都会回答GET请求和POST请求,但其实在后端配置接口时,请求方式不仅这两种,还会有PUT,DELETE,PATCH等,当然我们在开发的时候偶尔也会遇到接口要求使用这几种方式进行请求,下面我们就来讲一讲这几种方式分别有什么不同。 首先先要了解http定义与服务器进行交互的方式,其中基本的有GET,POST,PUT,DELETE,PATCH是后增的方式。同时还要知道URL代表的是 统一资源
浅谈Ajax请求中的GET,POST,PUT,DELETE,PATCH,OPTIONS
|
JSON Java 测试技术
REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求
REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求
REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求
|
开发框架 前端开发 JavaScript
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
564 0
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
restTemplate发送携带header参数的get和post请求demo
restTemplate发送携带header参数的get和post请求demo
259 0
|
负载均衡 Java Spring
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)(下)
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)(下)
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)(下)
|
前端开发 数据库
JavaWeb - RESTful风格 GET、POST、PUT、DELETE 前端请求示例
JavaWeb - RESTful风格 GET、POST、PUT、DELETE 前端请求示例
456 0