I'm creating an application to display different intresting data. I've been trying create generics REST controllers for several days. I need generic mongodb repository, which is used in generic service, which is used in generic controller :) You can see that schema on picture.
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);
}
}
My generic repository :
@NoRepositoryBean
public interface GenericValueRepository<T extends Value> extends MongoRepository<T, String> {
}
SpeedValueRepository.java
@Repository
public interface SpeedValueRepository extends GenericValueRepository<SpeedValue> {
}
And finally 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();
}
and controller which extends GenericController
@RestController
@RequestMapping("api/values/speed")
public class SpeedValueControllerREST extends GenericController<SpeedValue>{
@Autowired
public SpeedValueControllerREST(SpeedValueService speedValueService) {
super(speedValueService);
}
}
This code doesn't work, I've been trying with many versions, but result was NPE or code didn't compile. I have to create many models, repositories, services like these above. Can you resolve that problem? Maybe I shoud do it in other way?