java - 如何使用 Spring Boot 创建 mongodb 通用 REST API?

标签 java mongodb spring-boot generics inheritance

我正在创建一个应用程序来显示不同的有趣数据。几天来我一直在尝试创建泛型 REST Controller 。我需要通用 mongodb 存储库,它在通用服务中使用,在通用 Controller 中使用:)您可以在图片上看到该架构。

packages schema

Value.java

    @Data
    @NoArgsConstructor
    public class Value implements Serializable {

    @Id
    String id;
    String description;
    Integer value;

    public Value(int value, String description) {
        this.description = description;
        this.value = value;
     }
}

SpeedValue.java

@Data
@EqualsAndHashCode(callSuper = true)

@Document(collection = "speed_values")
public class SpeedValue extends Value {

    public SpeedValue(int value, String description) {
        super(value, description);
    }

}

CurrencyValue.java

@EqualsAndHashCode(callSuper = true)
@Data

@Document(collection = "currency_values")
public class CurrencyValue extends Value {

    public CurrencyValue(int value, String description) {
        super(value, description);
    }
}

我的通用存储库:

@NoRepositoryBean
public interface GenericValueRepository<T extends Value> extends MongoRepository<T, String> {
}

SpeedValueRepository.java

@Repository
public interface SpeedValueRepository extends GenericValueRepository<SpeedValue> {
}

最后GenericControler.java

@Controller
public class GenericController<T extends Value> {

    private GenericServiceImpl<T> service;

    public GenericController(GenericServiceImpl<T> speedValueService) {
        this.service = speedValueService;
    }

    @GetMapping
    public List<T> getCurrencyValue() {
        return service.findAll();
    }

    @PostMapping
    public String create(@RequestBody T json) {

        T created = this.service.save(json);
        return "Added to DB: \n" + created.toString();
    }

和扩展 GenericController 的 Controller

@RestController
@RequestMapping("api/values/speed")
public class SpeedValueControllerREST extends GenericController<SpeedValue>{

    @Autowired
    public SpeedValueControllerREST(SpeedValueService speedValueService) {
        super(speedValueService);
    }
}

这段代码不起作用,我已经尝试了很多版本,但结果是 NPE 或代码无法编译。 我必须创建许多模型、存储库、类似上面的服务。你能解决这个问题吗?也许我应该用其他方式来做?

最佳答案

最后,我通过以下方式解决了这个问题:

https://stackoverflow.com/a/53406444/10474557

这正是我想要的

关于java - 如何使用 Spring Boot 创建 mongodb 通用 REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58862095/

相关文章:

java - 使用 attributeconverter 时,Spring Boot 应用程序未完成启动

java - 如何从 eclipse 或其他方式调试 .bsh 文件

java - Android onTouchListener Action_Up-MotionEvent 在第一次恢复后延迟

javascript - mongodb 在子文档中使用 $pop

mongodb - $group和$max操作-Mongodb后如何获取整个文档?

java - 在 Spring Boot 中提供静态图像

java - 如何在保存和抛出检查异常之前进行验证

java - Android Studio : Run/Debug Configurations unable to create application

java - Selenium webdriver-获取性能日志-未知日期时间戳(12345.12345)

linux - 从 shell 到 docker 容器执行多个命令