如何在Vibe.d中使用HTTP代码返回JSON?
我不仅要返回JSON,还要返回HTTP响应代码 我通过URLRouter注册REST接口:如何在Vibe.d中使用HTTP代码返回JSON?,d,vibed,D,Vibed,我不仅要返回JSON,还要返回HTTP响应代码 我通过URLRouter注册REST接口: router.registerRestInterface(新的ClientServerAPI); 我的REST实现示例: 模块clienserverapi.clientserver; 导入api.clientserver; 导入models.replies.client\u版本; /** 客户端-服务器API的实现。 */ 类ClientServerAPI:IClientServerAPI{ @安全:
router.registerRestInterface(新的ClientServerAPI);
我的REST实现示例:
模块clienserverapi.clientserver;
导入api.clientserver;
导入models.replies.client\u版本;
/**
客户端-服务器API的实现。
*/
类ClientServerAPI:IClientServerAPI{
@安全:
ClientVersions getSupportedClientVersions(){
bool[string]不稳定特征;
返回ClientVersions(supportedVersions.dup,unstableFeatures);
}
}
在REST接口生成器中,响应代码是自动处理的,由于无法将HTTPServerResponse/HTTPServerRequest参数传递到REST方法中,因此无法控制返回的状态
但是,有些内置状态会得到处理:
- 根据内容返回200/204
- 400对不匹配参数的错误请求
- 404未找到不匹配的路由
- 大多数异常都返回500内部服务器错误
- (调试模式之外)发送未经授权/错误请求/禁止
导入vibe.vibe;
进口标准单位;
@安全:
void main(){
自动服务器=新的HTTPServerSettings;
server.port=3000;
server.bindAddresses=[“::1”,“127.0.0.1”];
自动路由器=新路由器;
RestInterfaceSettings设置=新建RestInterfaceSettings();
//这是错误页面在任何抛出的异常(如HTTPStatusException)上的外观
settings.errorHandler=(HTTPServerRequest-req,HTTPServerResponse-res,
RestErrorInformation错误)@safe{
res.writeJsonBody([
//按你喜欢的方式设计
“ok”:Json(false),
“错误”:序列化为JSON([
“status”:Json(cast(int)error.statusCode),
“message”:Json(error.exception.msg),
“父”:Json(“/api/something”)
])
]);
};
router.registerRestInterface(新Impl,设置);
listenHTTP(服务器、路由器);
运行应用程序();
}
接口重新启动{
字符串getGreeting(字符串名称);
}
类Impl:RestAPI{
字符串getGreeting(字符串名称)
{
//名称为空时引发HTTP错误请求错误
如果(name.length==0)
抛出新的HTTPStatusException(HTTPStatus.badRequest,“名称参数不能为空!”);
//名称为Bob时引发HTTP冲突错误代码
if(sicmp(名称,“bob”)==0)
抛出新的HTTPStatusException(HTTPStatus.conflict,“服务器无法问候Bob!”);
返回“你好,”~name~“!”;
}
}
然后您的服务器将做出如下响应:
{
“ok”:错,
“错误”:{
“消息”:“服务器无法问候Bob!”,
“地位”:409,
“父项”:“/api/something”
}
}
您可以尝试hunt框架,Rest api的示例代码:
module app.controller.myapi;
import hunt.framework;
import app.message.UserMessage;
class MyapiController : Controller
{
mixin MakeController;
@Action
JsonResponse test()
{
UserMessage user;
user.id = 1;
user.name = "MyName";
user.email = "test@domain.com";
return new JsonResponse(user);
}
}
您的响应结构:
module app.message.ResultMessage;
struct UserMessage
{
int id;
string name;
string email;
}
回应结果如下:
[ "id": 1, "name": "MyName", "email": "test@domain.com" ]