我来自Rails背景,正在深入研究Java。我一直在研究一个样板项目,它在MatchesController.java中定义了一个show动作;
@RestController
final class MatchesController {
private final MatchRepository matchRepository;
@Autowired
MatchesController(MatchRepository matchRepository) {
this.matchRepository = matchRepository;
}
@RequestMapping(method = RequestMethod.GET, value = "/matches/{id}")
ResponseEntity<Match> show(@PathVariable String id) {
Match match = matchRepository.findOne(id);
if (match == null) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} else {
return new ResponseEntity<>(match, HttpStatus.OK);
}
}
}
在Rails中,show动作看起来像这样;
def show
@match = Match.find(params[:id])
end
索引操作看起来像;
def index
@matches = Match.all
end
我正在寻找如何在Java / Spring中编写等效的索引操作,我觉得我应该定义或使用某种List或Array对象来检索所有matchRepository记录:
我尝试类似下面的内容,但当然是错误的,不会编译。 show动作确实可以正常工作并与我的本地mysql db交互就好了。我只是一个完整的java / spring新手而且正在玩弄。
@RequestMapping(method = RequestMethod.GET, value = "/matches")
ResponseEntity<Match> index() {
Match matches = matchRepository.findAll();
if (matches == null) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} else {
return new ResponseEntity<>(matches, HttpStatus.OK);
}
}
编译错误;
[错误]编译错误:
/Users/home/Latta/Spring/pong_matcher_spring/src/main/java/org/pongmatcher/web/MatchesController.java:[36,48]不兼容的类型:java.util.List无法转换为org.pongmatcher .domain.Match [INFO] 1错误
答案 0 :(得分:1)
您的MatchRepository#findAll()
方法的返回类型似乎为List<Match>
。您不能将此类值分配给Match
类型的变量。
你需要
List<Match> matches = matchRepository.findAll();
然后需要更改您的返回类型以匹配
ResponseEntity<List<Match>> index() {
Java是强类型的。
此外,如果尚未包含,则必须导入List包。
import java.util.List;