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

Spring boot mongodb审核错误

陆昂然
2023-03-14

我试图在我的spring boot应用程序中配置mongodb审核,在尝试持久化我的域类时出现了这个错误:

java.lang.IllegalArgumentException: Couldn't find PersistentEntity for type class com.example.hateoasapi.domain.Post!
    package com.example.hateoasapi.config;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.config.EnableMongoAuditing;
import org.springframework.data.mongodb.core.MongoTemplate;

import com.mongodb.MongoClient;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

import java.util.Collection;
import java.util.Collections;


@Configuration
@EnableMongoAuditing
@EnableMongoRepositories(value = "com.example.hateoasapi.repository")
public class MongoConfig extends AbstractMongoConfiguration {

    @Value("${spring.data.mongodb.database}")
    private String databaseName;

    @Value("${spring.data.mongodb.host}")
    private String databaseHost;

    @Value("${spring.data.mongodb.port}")
    private Integer databasePort;

    @Override
    protected String getDatabaseName() {
        return this.databaseName;
    }

    @Bean
    @Override
    public MongoClient mongoClient() {
        return new MongoClient(databaseHost, databasePort);
    }

    @Bean
    public MongoTemplate mongoTemplate() {
        return new MongoTemplate(mongoClient(), databaseName);
    }

    @Override
    protected Collection<String> getMappingBasePackages() {
        return Collections.singleton("com.example.hateoasapi.domain");
    }
}
package com.example.hateoasapi.config;


import com.example.hateoasapi.domain.User;
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

import java.util.Optional;

@Component
public class SecurityAuditor implements AuditorAware<User> {

    @Override
    public Optional<User> getCurrentAuditor() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        if (authentication == null || !authentication.isAuthenticated()) {
            return null;
        }

        return Optional.of((User) authentication.getPrincipal());
    }
}

和我的域类:

package com.example.hateoasapi.domain;

import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;

import org.joda.time.DateTime;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.hateoas.ResourceSupport;
import com.fasterxml.jackson.annotation.JsonCreator;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import static org.springframework.hateoas.mvc.ControllerLinkBuilder.*;

import java.io.Serializable;
import java.util.List;

import com.example.hateoasapi.controller.*;

@Getter
@Setter
@ToString
@Document
public class Post extends ResourceSupport implements Serializable {

    @Id
    @Field(value = "_id")
    private String objectId;

    @DBRef
    private List<Comment> comments;

    @DBRef
    private User author;

    @NotBlank
    private String body;

    @NotBlank
    private String title;

    private String categoryId;

    @NotEmpty(message = "Tags cannot be empty")
    private List<PostTag> tags;

    @CreatedDate
    private DateTime createdDate;

    @LastModifiedDate
    private DateTime lastModifiedDate;

    @CreatedBy
    private User createdBy;

    private Long views;    
    private List<PostRating> likes;
    private List<PostRating> dislikes;


    @JsonCreator
    public Post() {}

    public Post(String title, String body) {
        this.body = body;
        this.title = title;
    }

    public Post(User author, String body, String title, String categoryId, List<PostTag> tags) {
        this.author = author;
        this.body = body;
        this.title = title;
        this.categoryId = categoryId;
        this.tags = tags;
    }

    public void addLinks() {
        this.add(linkTo(methodOn(PostController.class).getAllPosts(null)).withSelfRel());
    }
}

共有1个答案

毋宪
2023-03-14

我用下一个配置解决了这个问题:

@Configuration
@EnableMongoRepositories(basePackages = "YOUR.PACKAGE")
@EnableMongoAuditing
public class MongoConfig extends AbstractMongoConfiguration {

    @Value("${spring.data.mongodb.host}")
    private String host;

    @Value("${spring.data.mongodb.port}")
    private Integer port;

    @Value("${spring.data.mongodb.database}")
    private String database;

    @Override
    public MongoClient mongoClient() {
        return new MongoClient(host, port);
    }

    @Override
    protected String getDatabaseName() {
        return database;
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory(), mappingMongoConverter());
    }

    @Bean
    public MongoDbFactory mongoDbFactory() {
        return new SimpleMongoDbFactory(mongoClient(), database);
    }
}

只需使用mongoTemplate(MongoDbFactory MongoDbFactory,@nullable MongoConverter MongoConverter)的构造函数添加mongoTemplate的bean

 类似资料:
  • 接口说明 审核用户的注册申请 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/user/1.0.0/check 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 guid string form 是 用户ID status int form 是 用户状态[0:未审核;1:已审核] 响应字段说明 无 响应

  • 小程序审核规范 为保护用户权益及京东小程序平台安全,并方便小程序开发者对平台审核规则进行了解,京东制订京东小程序审核规范(以下简称“本规范”)。除本规范外,服务商还应遵守《京东小程序平台服务条款》(以下简称“平台服务条款”)、小程序运营规范及京东修订或公布的相关协议、规则与规范。 一、小程序基本信息审核 1.京东小程序的基本信息,其中包括小程序名称、介绍、图标等均不可: (1) 侵犯他人的著作权、

  • 审核发布流程 第一步:上传代码包 开发完成后,开发者在开发管理中通过手动点击“上传代码包”的方式提交开发版本。京东小程序允许多次上传代码包,重新上传后将覆盖之前的版本。 在提交审核之前可以将您的京东小程序设置为体验版本,让部分用户先体验小程序。 第二步:提交审核 代码包上传成功后,并且小程序功能研发和测试完毕,通过点击“提交审核”,将当前的开发版本提交审核。可以在审核版本中看到,当状态为“审核中”

  • 工单审核 实时刷新开关默认打开,如需删除记录请先关闭该开关。 如定时工单的时间小于当前时间,执行该工单将会立即执行(请确保Yearning所在环境时区与使用者时区一致,否则会导致定时执行异常!) 目前仅支持延时工单中止,其他工单执行后无法中止! 执行成功的工单可点击执行信息按钮后查看回滚语句 查询审核 点击全部中止按钮将会中止所有用户的查询权限 如没有在设置页面开启查询审核开关,则默认用户查询申请

  • 目的 对于小米生态链产品,避免内测阶段和正式发售之后出现严重的用户隐私和数据安全问题。 重点 数据的采集、存储、传输和访问控制。如果使用了非生态链企业自身的产品和云服务,请注明(例如小米文件存储服务,阿里云数据库服务,金山云虚机,小米账号,小米云服务MiCloud, 小米智能家庭MIOT/MIIO,等)。 流程 新产品内测之前提交文档审核,审核通过之后才可以开始内测(如果有严重问题必须修正)。 新