2014-12-06 10 views
0

Я исхожу из фона Rails и перехожу на Java. Я работал над проектом шаблона, который имеет действие show, определенное в MatchesController.java;Указатель Action Java Spring Controller

@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 действие шоу будет выглядеть примерно так;

def show 
    @match = Match.find(params[:id]) 
end 

Показатель индекса будет выглядеть;

def index 
    @matches = Match.all 
end 

Я ищу, как я хотел бы написать эквивалентное действие индекса в Java/Spring, и я чувствую, что я должен определить или использовать какой-то список или массив объектов, чтобы получить все 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); 
    } 
} 

Ошибки компиляции;

[ERROR] СБОР ОШИБКА:

/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

кажется, что ваш метод MatchRepository#findAll() имеет тип возвращаемого List<Match>. Вы не можете присвоить такое значение переменной типа Match.

Вам нужно

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

, а затем нужно будет изменить тип возвращаемого значения, чтобы соответствовать

ResponseEntity<List<Match>> index() { 

Java является строго типизированным.

Кроме того, если он еще не включен, вы должны импортировать пакет List.

import java.util.List;