我正在创建一个应用程序来显示不同的有趣数据。几天来我一直在尝试创建泛型 REST Controller 。我需要通用 mongodb 存储库,它在通用服务中使用,在通用 Controller 中使用:)您可以在图片上看到该架构。
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 或代码无法编译。 我必须创建许多模型、存储库、类似上面的服务。你能解决这个问题吗?也许我应该用其他方式来做?
最佳答案
关于java - 如何使用 Spring Boot 创建 mongodb 通用 REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58862095/