首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复actix_web中“{function}没有实现特征函数,_,_>”错误?

如何修复actix_web中“{function}没有实现特征函数,_,_>”错误?
EN

Stack Overflow用户
提问于 2021-01-23 13:55:07
回答 1查看 622关注 0票数 1

我有这个简单的代码:

代码语言:javascript
复制
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
use serde::{Deserialize, Serialize};
use serde_json::{json};
use validator::{Validate, ValidationError};

#[derive(Deserialize, Serialize, Validate)]
struct Auth {
    #[validate(length(min = 4))]
    username: String,
    password: String,
}

#[post("/auth")]
async fn auth(form: web::Json<Auth>) -> Result<serde_json::Value, ValidationError> {
    Ok(json!{ "success" })
}

这一直给我这个错误:

代码语言:javascript
复制
error[E0277]: the trait bound `fn(Json<Auth>) -> impl std::future::Future {auth}: Factory<_, _, _>` is not satisfied
  --> src/main.rs:77:10
   |
77 | async fn auth(form: web::Json<Auth>) -> Result<serde_json::Value, ValidationError> {
   |          ^^^^ the trait `Factory<_, _, _>` is not implemented for `fn(Json<Auth>) -> impl std::future::Future {auth}`

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-01-24 08:33:23

我想通了。将Result<serde_json::Value, ValidationError>更改为HttpResponse并在HttpResponse中返回json就可以了。

代码语言:javascript
复制
#[post("/auth")]
async fn auth(form: web::Json<Auth>) -> HttpResponse {
    match form.validate() {
        Ok(_) => HttpResponse::Ok().json(json!{ {"success":true}}),
        Err(e) => HttpResponse::NotAcceptable().body(format!("{}", e))
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65856184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档