【发布时间】:2021-12-07 13:13:30
【问题描述】:
我对如何在 Spring Boot 2.5.0 中将通用服务自动装配到控制器中感到有些困惑。
代码如下:
主控制器:
@RestController
@RequestMapping("/classifiers")
public class ClassifierController<T> {
protected static final Logger LOG = LoggerFactory.getLogger(UserController.class);
public final T classifierService;
protected final JwtTokenFilter jwtTokenFilter;
protected final JwtTokenUtil jwtTokenUtil;
public ClassifierController(final JwtTokenFilter jwtTokenFilter,
final JwtTokenUtil jwtTokenUtil,
final T classifierService) {
this.jwtTokenFilter = jwtTokenFilter;
this.jwtTokenUtil = jwtTokenUtil;
this.classifierService = classifierService;
}
}
扩展控制器:
@RestController
@RequestMapping("/ss01dictionary")
@CrossOrigin(origins = "*", allowedHeaders = "*")
public class SS01WasteDictionaryController
extends ClassifierController<DictionaryService> {
@Autowired
public SS01WasteDictionaryController(JwtTokenFilter jwtTokenFilter,
JwtTokenUtil jwtTokenUtil,
DictionaryService classifierService) {
super(jwtTokenFilter, jwtTokenUtil, classifierService);
}
@RequestMapping(value = "/list", method = GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<?> getData(@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "20") int pageSize) {
PageRequest pageable = PageRequest.of(page, pageSize);
Page<Dictionary> dictionaryDTOList = classifierService.getAllDictionaryValues(pageable);
return ResponseEntity.status(HttpStatus.OK).body(dictionaryDTOList);
}
...
主要抽象服务:
@Service
public abstract class ClassifierService {
public final JdbcTemplate jdbcTemplate;
public ClassifierService(final JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
protected abstract Integer count();
}
字典服务:
@Service
public class DictionaryService
extends ClassifierService {
public DictionaryService(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
public Page<DictionaryDTO> getAllDictionaryValues(Pageable page) {
List<DictionaryDTO> result = jdbcTemplate.query(GET_SQL + " LIMIT " + page.getPageSize() + " OFFSET " + page.getOffset(),
new DictionaryRowMapper());
return new PageImpl<>(result, page, count());
}
我做错了什么? 我想拥有一些抽象方法和通用控制器的通用服务。 如何自动连接 T 服务,以便从特定服务中获取特定控制器的方法?
【问题讨论】:
-
您遇到什么错误?您没有发布任何错误。首先,我建议不要用
@Service或@RestController注释你的超级/抽象类 -
@pleft 你好!抱歉,错误是 ClassifierController 中的最终 T 分类器服务没有 Beans
标签: java spring-boot autowired spring-restcontroller spring-rest