Javascript Post空正文(长度为0的字符串)

Javascript Post空正文(长度为0的字符串),javascript,xmlhttprequest,Javascript,Xmlhttprequest,要将内容发布到服务器,我使用以下代码: var u1=new XMLHttpRequest(); u1.open('POST','java/packagename'); u1.发送(“”);// 最后我自己找到了解决办法 我将u1代码重写为 var h = value === null?'null':(v === ''?'empty-string':(v === undefined?'undefined':null)); if (h != null) { u1.setRequestHe

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

var u1=new XMLHttpRequest();
u1.open('POST','java/packagename');

u1.发送(“”);// 最后我自己找到了解决办法

我将u1代码重写为

var h = value === null?'null':(v === ''?'empty-string':(v === undefined?'undefined':null));
if (h != null) {
    u1.setRequestHeader('X-empty-body-interpret-as', h);
}
(我知道你们的想法:嘿,你们违反了RFC6648,但我现在不在乎)

在控制器中,我读取如下标题:

@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);
}
@RequestMapping(value=“java/packagename”,method=RequestMethod.POST)
public ResponseEntity updatePackage(@RequestBody(required=false)字符串entityPackageNew,HttpServletRequest请求){
String interpretanullas=request.getHeader(“X-empty-body-interpretact-as”);
DP databasemavenevelopment=entityManager.find(DP.class,databasemavenevelopmationid);
if(entityPackageNew==null){
开关(解释为空){
案例“空字符串”:
DatabaseMavenDevelopment.setEntityPackage(“”);
打破
“空”情况:
案例“未定义”:
DatabaseMavenDevelopment.setEntityPackage(空);
打破
}
}否则{
databasemavenevelopment.setEntityPackage(entityPackageNew);
}
persist(数据库开发);
返回新的响应状态(HttpStatus.OK);
}

因为如果你发送的是空字符串,那么你什么也不发送。@SebastianOlsen我不同意。Null或undefined不算什么,空字符串就是空字符串。对,但http不是这样工作的。实际上,当您发送一个网络请求时,并没有数据类型这样的东西,它都是字符串、头等等。因此,任何服务器都会将“空”字符串解释为无,因为您正在发送。。。没什么。@SebastianOlsen读了说明书,一条空行将标题和正文分开。空行表示“有要发送的正文”。如果没有发送空行,甚至不会发送空字符串。我不确定您的图像应该证明什么,因为在您的图像中,您没有发送空字符串,而是发送JSON。这对字节体不起作用,它们总是得到0。