当前位置: 首页 > 知识库问答 >
问题:

如果客户端设置content-type="Application/xml"并且body=null,如何解析POST请求的请求主体?

何安宜
2023-03-14

我有POST RESTendpoint,它最初不期望任何请求正文。我想为这个API添加可选的请求正文。可选,意味着我希望所有客户端,使用此API with content-type="Application/xml"和空正文,以相同的方式继续使用API,而无需重写任何单行代码。对于content-type="Application/json",它工作正常,无需客户端更改他的代码。但对于“应用程序/xml”,客户端现在会收到“400错误请求”响应。是否有机会引入可选请求正文并支持所有现有的API客户端?

RESTendpoint是用java编写的,来自“javax.xml.bind.annotation”包的注释用于声明对象模型

下面是endpoint的签名,用招摇注释定义。dueDatesDetails-应作为可选项添加的对象:

@POST
@Path("/sites/{siteid}/filestatus")
public Response linkContent(
        @ApiParam(value = "site id", required = true) @PathParam("siteid") String siteId,
        @ApiParam(value = "status", required = true) @QueryParam("status") String status,
        DueDatesDetails dueDatesDetails) {

这是java对象模型,必须是可选的:

@XmlRootElement(name = "duedatesdetails")
@XmlAccessorType(XmlAccessType.FIELD)
public class DueDatesDetails
{
    @Getter
    @Setter
    @XmlElement(name = "duedatedetails")
    @JsonProperty("duedatesdetails")
    private List<DueDateDetails> dueDateDetailsList;
}

共有1个答案

乐正意智
2023-03-14

那么您不能使用请求正文作为方法参数。我相信您使用的框架(很可能是Spring)没有可选的请求正文功能。您必须手动从请求流中获取有效负载

@POST
@Path("/sites/{siteid}/filestatus")
public Response linkContent(
        @ApiParam(value = "site id", required = true) @PathParam("siteid") String siteId,
        @ApiParam(value = "status", required = true) @QueryParam("status") String status, HttpServletRequest request) {
        byte[] payload = IOUtils.toByteArray(request.getReader(), request.getCharacterEncoding());      
        String body =  new String(payload, request.getCharacterEncoding());
        if(body == null){
            // do something
        } else {
            // parse body to convert to xml object dueDatesDetails
        }
 类似资料:
  • 我尝试用angular发送post请求,但是当我将content-type设置为application/json时,请求的content-type总是没有设置,HTTP方法总是被删除,所有发布的数据都从请求体中删除。这里是我的代码 这里是我的请求

  • 客户端的HTTP/HTTPS请求。 进程:主进程​ ClientRequest是由EventEmitter来实现Writable Stream​ new ClientRequest(options) 作用:发起新的HTTP/HTTPS请求 options(Object | String) - options是String时即请求URL。 options 是Object时则按以下属性请求: meth

  • 我正在编写一个rest客户机,它使用服务器的POST restful sevice。现在服务需要2个参数作为'form-data'中请求的一部分。 如果您有跨邮递员rest客户机,我们有一个选项来设置表单数据,并给出键值对参数。 现在,如何发送两个参数,即“文件名”,“文件版本”和它们的值作为表单数据的一部分?

  • 问题内容: 我正在尝试使用Alamofire快速发布尸体的发布请求。 我的json主体看起来像: 我正在尝试使 NSDictionnary看起来像: 我使用Alamofire的请求如下所示: 该请求有一个错误,我相信问题出在字典列表上,因为如果我在没有列表的情况下发出请求,它就可以正常工作,所以有什么主意吗? 我已经尝试过建议的解决方案,但是我遇到了同样的问题: 问题答案: 你近了 参数字典格式看

  • httplib 库主要用来模拟客户端发送 HTTP 请求,类似于 Curl 工具,支持 JQuery 类似的链式操作。使用起来相当的方便;通过如下方式进行安装: go get github.com/astaxie/beego/httplib 如何使用 首先导入包 import ( "github.com/astaxie/beego/httplib" ) 然后初始化请求方法,返回对象 r

  • 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的。您可以查阅HTTP协议来获得更多的信息。 下表列出了浏览器端信息头的一些重要内容,在以后的网络编程中将会经常见到这些信息: 信息 描述 Accept 指定浏览器或其他客户端可以处理的MIME类型。它的值通常为 image/png 或 image/jpeg Accept-Char