当前位置: 首页 > 知识库问答 >
问题:

尝试在MongoDB中保存对象时,HTTP POST返回400

子车睿
2023-03-14

我是反应式编程新手,目前我有以下问题。我有一个人类的目标。具有属性id、firstName、lastName和List的java类

人类JAVA

@Document
public class Human {

    @Id
    @JsonIgnore
    private String id;
    
     private String firstName;

     private String lastName;
     
     private List<Hobbies>hobbies;
     
     public Human(String fName, String lName, List<Hobbies> hobb) {
         this.firstName= dNum;
         this.lastName= saNum;
         this.hobbies= hobb;
     }
     public String getId() {
         return this.id;
     }
     public String getFirstName() {
         return this.firstName;
     }
     
     public String getLastName() {
         return this.lastName;
     }
     
     public List<Hobbies> getHobbies() {
         return this.hobbies;
     }
     
     public void setFirstName(String fName) {
         this.firstName = fName;
     }
     
     public void setLastName(String lName) {
         this.lastName= lName;
     }
     
     public void setHobbies(List<Hobbies> hobb) {
         this.hobbies= hobb;
     }
    
}

Hobbies.java

public class Hobbies {
    
    private String type;
    
    public Hobbies(String typ) {
        this.type = typ;
    }
    
    public String getType() {
        return this.type;
    }
    
    public void setType(String typ) {
        this.type = typ;
    }

}

人Config.java

@Configuration
public class HumanConfig {

    @Autowired
    MongoClient mongoClient;
    
    @Bean
    public ReactiveMongoTemplate reactiveMongoTemplate() {
        return new ReactiveMongoTemplate(mongoClient, "human");
    }
    
}

人形路由器。JAVA

@Configuration
public class HumanRouter {
    
    @Bean
    public RouterFunction<ServerResponse> humanRoute(HumanHandler humHandler) {
        return RouterFunctions
            .route(GET("/api/listHumans").and(accept(MediaType.APPLICATION_JSON)),
                    humHandler::getAllHumans)
            .andRoute(POST("/api/newHuman").and(accept(MediaType.APPLICATION_JSON)),
                    humHandler::create);
    }
}

人类训练师。JAVA

@Component
public class HumanHandler {
    
    private final HumanService humService;

    @Autowired
    public HumanHandler(HumanService humService) {
        this.humService= humService;
    }
    
    public Mono<ServerResponse> getAllHumans(ServerRequest serverRequest) {
        Flux<Human> result = humService.getAllHumans();
        return result
                   .collectList()
                   .flatMap(h -> {
                       if(h.isEmpty()) {
                             return ServerResponse.notFound().build();

                           }
                           else {
                             return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(fromValue(h));
                           }
                       });
    }
        
        public Mono<ServerResponse> create(ServerRequest request ){
            public Mono<ServerResponse> create(ServerRequest request ){
        Mono<Human> humToCreate = request.bodyToMono(Human.class);
        Mono<Human> created = humService.createHum(humToCreate );
        Mono<Object> id = created.map(item -> item.getId());
        return ServerResponse.created(UriComponentsBuilder.fromPath(request.uri()+ "/"+ id).build().toUri())
                .contentType(MediaType.APPLICATION_JSON).body(created.map(item -> item.getId()), String.class);
        
        }

}

人力服务。JAVA

@Service
public class HumanService {

    @Autowired
    ReactiveMongoTemplate mongo;
    
    public Flux<Human> getAllHumans(){
        return mongo.findAll(Human.class);
    }

    public Mono<Human> createHum(Mono<Human> human){
        return mongo.save(human);
    }
    

人性化的应用。JAVA

@SpringBootApplication
@ComponentScan({"human"})
public class HumanApplication {

    public static void main(String[] args) {
        SpringApplication.run(HumanApplication.class, args);
    }

}

我在POST请求的正文中放入Postman的json对象如下所示:

{
    "firstName": "John",
    "lastName": "Johnson",
    "hobbies": [
        {
            "type": "reading"
        },
        {
            "type": "travelling"
        }
    ]
}

docker撰写。亚马尔

version: "3.8"

services:
    mongodb:
        image: mongo
        container_name: human
        ports:
            - 27017:27017
        volumes:
            - data:/data
        environment:
            - MONGO_INITDB_ROOT_USERNAME=rootuser
            - MONGO_INITDB_ROOT_PASSWORD=rootpass
    mongo-express:
        image: mongo-express
        container_name: mongo-express-human
        restart: always
        ports:
            - 8081:8081
        environment:
            - ME_CONFIG_MONGODB_ADMINUSERNAME=rootuser
            - ME_CONFIG_MONGODB_ADMINPASSWORD=rootpass
            - ME_CONFIG_MONGODB_SERVER=mongodb

volumes:
    data: {}

networks:
    default:
        name: mongodb_network_v2
        

应用属性

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=rootuser
spring.data.mongodb.password=rootpass
spring.data.mongodb.database=calibration
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
server.error.include-message=always

我真的不知道我做错了什么。我将不胜感激!

共有1个答案

阎宝
2023-03-14
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0    
    https://maven.apache.org/xsd/maven-4.0.0.xsd">

    ...

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        ...

    </dependencies>
    ...

</project>
spring.data.mongodb.uri=mongodb+srv://rootuser: 
rootpass@<cluster>.mongodb.net/mygrocerylist

Spring数据mongodb。数据库=校准

查看此项了解更多信息-

 类似资料:
  • 问题内容: 我有一个符合协议的简单对象。 我正在尝试将其实例保存在其中,但是由于以下错误,它一直失败。 由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“试图为关键jobCategory插入非属性列表对象” 这是我要保存的代码。 我用普通字符串将枚举值替换为key,但是仍然发生相同的错误。知道是什么原因造成的吗? 问题答案: 您需要创建从您的实例使用

  • 在我的代码中,一个函数返回一个protobuf对象,我想把它保存在一个文件xyz中。pb 当我试图使用fs保存它时。writefilesync没有保存它。 它本质上是圆形的。所以,我尝试使用循环json模块保存它,以确认其中是否有任何内容,以及它是否有数据。 但是,由于我首先使用了循环json,它没有正确的信息(格式不正确),也没有任何用处。 如何使用nodejs将此原型保存在文件中? 谢谢

  • 本文向大家介绍在MongoDB中如何获取保存的对象?,包括了在MongoDB中如何获取保存的对象?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个变量。以下是查询- 以下是使用save()保存记录的查询- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出-

  • 我是MongoDB的新手,我正在用Mongoose创建一个简单的数据库,模型如下:用户、游戏和玩家。 因此,一个用户不包含或包含多个游戏。每个游戏都有一个玩家,每个玩家都指一个用户。如下所示(为了清晰起见,我简化了模式): 因此,现在在前端,我想向后端发送一份请愿书,为用户Joe(_id:11111)和Bob(_id:22222)创建一个新游戏,因此我向/api/games发送了一篇帖子,帖子的主

  • 我使用一个自定义的视图,在我使用画布,用户可以绘制任何东西,之后,我想保存在sd卡的图像,英国电信是不能做到这一点。不知道是怎么回事。

  • 如何在Express js中从数据库中取回对象?当我执行POST请求时,我只返回状态201,而不是响应中的对象。 按照下面的方式,它返回一个空的res.data字段,而不是对象。 要将所有对象恢复到数组中,我可以这样做: