索引操作Java Spring Controller

时间:2014-12-06 23:29:17

标签: java ruby-on-rails spring-mvc ruby-on-rails-4 controller

我来自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错误

1 个答案:

答案 0 :(得分:1)

您的MatchRepository#findAll()方法的返回类型似乎为List<Match>。您不能将此类值分配给Match类型的变量。

你需要

List<Match> matches = matchRepository.findAll();

然后需要更改您的返回类型以匹配

ResponseEntity<List<Match>> index() {

Java是强类型的。

此外,如果尚未包含,则必须导入List包。

import java.util.List;