如何使用Plumber返回无响应体且状态码为202的API响应
解决方案
你遇到的乱码问题是Plumber默认序列化逻辑导致的:当你仅手动设置状态码为202时,默认序列化规则会将隐式返回的NULL处理为无效字节,才会出现乱码符号。可以通过显式指定空响应体的方式解决,以下是可直接使用的写法:
#* @param msg The message to echo back. #* @get /echo function(msg="", res){ # 设置202状态码 res$status <- 202 # 显式指定空二进制响应体,跳过默认序列化 res$body <- raw(0) # 如果需要保留application/json响应头可以加下面这行,不需要可以删掉 res$setHeader("Content-Type", "application/json") }
如果需要更简洁的写法,也可以直接使用res$send方法直接返回空内容:
#* @param msg The message to echo back. #* @get /echo function(msg="", res){ res$setHeader("Content-Type", "application/json") res$send("", status = 202) }
原理解释
- 你最开始返回空函数或者设置
res$body<-NULL时,Plumber的默认JSON序列化器会把NULL转为{},所以始终有一个空JSON对象的响应体。 - 后续使用
contentType序列化器后,空返回可以正常输出无响应体的结果,但手动修改状态码后序列化逻辑异常,输出了无效的空字节导致乱码。 - 显式给
res$body赋值为raw(0)(长度为0的二进制向量)或者调用res$send传入空字符串,都会强制Plumber跳过默认序列化步骤,直接返回完全为空的响应体,不会出现多余内容或者乱码。
内容的提问来源于stack exchange,提问作者user1700890
相关产品推荐
相关产品推荐

