【问题标题】:Post empty body (string having length of 0)发布空正文(长度为 0 的字符串)
【发布时间】:2018-07-12 02:39:56
【问题描述】:

要将某些内容发布到服务器,我使用以下代码:

var u1 = new XMLHttpRequest();
u1.open('POST', 'java/packagename');
u1.send(''); // <- string length of 0, a valid packagename in java.

var u2 = new XMLHttpRequest();
u2.open('POST', 'java/packagename');
u2.send('a'); // <- string length of 1, also a valid package name in java.

很遗憾长度为0的字符串没有贴出来。

【问题讨论】:

  • 因为如果你发送的是一个空字符串,那么你什么都不会发送。
  • @SebastianOlsen 我不同意。 Null 或 undefined 什么都不是,空字符串就是空字符串。
  • 对,但这不是 http 的工作方式。实际上,当您发送网络请求时,没有数据类型之类的东西,它全是字符串、标头,一切。因此,任何服务器都会将“空”字符串解释为什么都没有,因为您正在发送......什么都没有。
  • @SebastianOlsen 阅读规范伙伴,一个空行将标题与正文分开。空行表示“有要发送的正文”。如果没有发送空行,则甚至没有发送空字符串。
  • 我不确定您的图片应该证明什么,因为在您的图片中您发送的不是空字符串,而是 JSON。

标签: javascript xmlhttprequest


【解决方案1】:

终于自己找到了解决办法。

我将 u1 代码重写为

var h = value === null?'null':(v === ''?'empty-string':(v === undefined?'undefined':null));
if (h != null) {
    u1.setRequestHeader('X-empty-body-interpret-as', h);
}

(我知道你们所有人的想法:嘿,你违反了 RFC 6648,但我现在不在乎)

在控制器中,我读到这样的标题:

@RequestMapping(value="java/packagename", method = RequestMethod.POST)
public ResponseEntity<Object> updatePackage(@RequestBody(required=false) String entityPackageNew, HttpServletRequest request) {
    String interpretNullAs = request.getHeader("X-empty-body-interpret-as");
    DP databaseMavenRevelation = entityManager.find(DP.class, databaseMavenRevelationId);
    if (entityPackageNew == null) {
        switch (interpretNullAs) {
            case "empty-string":
                databaseMavenRevelation.setEntityPackage("");
                break;
            case "null":
            case "undefined":
                databaseMavenRevelation.setEntityPackage(null);
                break;
        }
    } else { 
        databaseMavenRevelation.setEntityPackage(entityPackageNew);
    }
    entityManager.persist(databaseMavenRevelation);
    return new ResponseEntity<>(HttpStatus.OK);
}

【讨论】:

  • 这对字节体不起作用,它们总是得到 0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 2013-07-11
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多