REST kontroler nie zwraca danych.

0
package com.springapp.mvc.controller;

import com.springapp.mvc.entities.User;
import com.springapp.mvc.services.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * Created by Marcin on 29.02.2016.
 */

@RestController
public class UserRest {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/rest/users/", method = RequestMethod.GET)
    public ResponseEntity<List<User>> getAllUsers(){
        List<User> users = userService.findAll();
        return new ResponseEntity<List<User>>(HttpStatus.OK);//You many decide to return HttpStatus.NOT_FOUND
    }

    //RestTemplate restTemplate = new RestTemplate();
    //Kot kot = restTemplate.getForObject("http://localhost:8080/api/koty/1", Kot.class);
}

WARN PageNotFound:1120 - No mapping found for HTTP request with URI [/rest/users] in DispatcherServlet with name 'DispatcherServlet'

type Status report

message

description The requested resource is not available.

Inne kontrolery i adresy działają, tylko nie są restami

0

Jak deployujesz aplikacje? Może masz coś jeszcze w adresie a nie od razu to od korzenia? Może w ogóle masz ten kontroler w złym pakiecie i go spring nie łyka?

0

http://localhost:8080/rest/users

Aplikacja startuje z taką ścieżką http://localhost:8080/ i pojawia się strona główna.

Klasa jest w tym samym pakiecie co inne kontrolery.

Może to ma znaczenie, że miałem już gotową aplikację bez rest. Skopiowałem ją, zmieniłem nazwę projektu przy pomocy Intellij. W open module settings usunąłem stary airfact i wziąłem utwórz nowy exploded from modules. Potem jak jest ikonka tomtacata w Intellij dałem edit configuration i tam było Fix i wybrałem airfact. Projekt używa mavena. Jedyne co dodałem to ten rest kontroler.

0

Coś zrobiłeś źle, ale trudno powiedzieć co nie widzą tego projektu.

0

A masz w classpath jakąś bibliotekę do JSONów, np. Jackson? :P

0

@Shalom
Projekt: https://github.com/giecmarcin/Cinema

Pewnie to coś z tym airfactem..

1

Do ResponseEntity nie przekazujesz w żaden sposób users. Możliwe, że spring deployuje ten kontroler pod jakimś innym URL-em. W logu startowym powinieneś mieć sekcję z wypisanymi wszystkimi ścieżkami.

0

Nazwa Twojego WARa to ProjectManager.war, więc pewnie adres do serwisu restowego:
http://localhost:8080/ProjectManager/rest/users/

Poza tym tak jak napisał @Koziołek nie przekazujesz users do odpowiedzi. Powinieneś to zrobić tak:

@RestController
public class UserRestController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/rest/users", method = RequestMethod.GET)
    public ResponseEntity<List<User>> getAllUsers() {
        List<User> users = userService.findAll();
        return new ResponseEntity<>(users, HttpStatus.OK);
    }
}

Jak to mówią, u mnie działa ;)

0

Poprawiony kod: https://github.com/giecmarcin/Cinema2
Airfact:
Capture.PNG
Capture.PNG
Dalej ten sam błąd.
@bakeraw2 u mnie dalej nie działa...;/
Cały log w załączniku.

Po wpisaniu: http://localhost:8080/rest/users powinny mi się pojawić dane w json w przeglądarce, prawda? A dostaję:
description The requested resource is not available.

1

Po pierwsze taka uwaga, że na GitHub commitujesz tylko pom.xml oraz src. Pliki z rozszerzeniem .iml oraz katalog .idea nie commitujesz, ponieważ są to pliki należące do IntelliJ, a nie Maven'a.

Jeżeli napisałeś:

@RequestMapping(value = "/rest/users/", method = RequestMethod.GET)
public ResponseEntity<List<User>> getAllUsers() {
    List<User> users = userService.findAll();
    return new ResponseEntity<List<User>>(users, HttpStatus.OK);//You many decide to return HttpStatus.NOT_FOUND
}

To link do kontrolera http://localhost:8080/rest/users/ a nie http://localhost:8080/rest/users
Usuń znak / po users w value adnotacji @RequestMapping i będzie hulało ;)

Poza tym polecam zaznajomienie się z technologią Spring Boot i konfiguracją Springa za pomocą Java Config a nie za pomocą plików XML.

Zobacz tutaj jak mało potrzeba, żeby skonfigurować Spring + JPA za pomocą Spring Boot:
https://github.com/DanielMichalski/spring-boot-swing-reservations

0

@bakeraw2
Jeszcze jedno pytanie o RESTA, czy nie powinno wyświetlić mi się tylko dwa obiekty tak jak w bazie?
Capture1.PNG

1

Aby wyświetlało się poprawnie powinieneś dodać adnotację @JsonIgnore nad właściwością:

@JsonIgnore
@ManyToMany(mappedBy = "roles", fetch = FetchType.EAGER)
private List<User> users;

Lub usunąć wiązanie do encji User w encji Role, tak aby tylko user miał dostęp do ról a nie odwrotnie. Proponuję drugie rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1