RequestMapping - wyszukiwanie w jsp

0

Aplikacja działa mi pod adresem http://localhost:8081/Library/books?title=Antygona
a jak zrobić żeby taki adres http://localhost:8081/Library/books zwracał mi wszystkie książki z bazy danych
w tej chwili dostaję błąd
HTTP Status 400 - Required String parameter 'title' is not present

@Controller
@RequestMapping("/books")
public class BooksController {


    @Autowired
    private BookService bookService;


    @RequestMapping
    public String getAllBooks(Model model) {
        model.addAttribute("books", bookService.getAllBooks());
        return "redirect:/books";
    }

    @RequestMapping(method = RequestMethod.GET)
    public String getBookByTitle(@RequestParam("title") String bookTitle, Model model) {
        model.addAttribute("books", bookService.getBookByTitle(bookTitle));
        return "books";
    }
}
                        <form class="navbar-form navbar-left" role="search" method="get">
                            Tytuł
                            <div class="form-group">
                                <input type="text" class="form-control" name="title"/>
                            </div>
                            <button type="submit" class="btn btn-default">
                                Szukaj
                            </button>
                        </form>
1

Tak to sie nie da bo z punktu widzenia protokołu http adresy http://localhost:8081/Library/books?title=Antygona i http://localhost:8081/Library/books są TYM SAMYM adresem, tylko że ten pierwszy ma zadeklarowaną jeszcze zmienną title. Zrób po prostu dwa mappingi np. jeden na /book a drugi na /books. Albo zrób PathVariable tak żeby adres był http://localhost:8081/Library/books/Antygona w tym przypadku gdzie wypisujesz dane jednej książki.
Wtedy będziesz miał ładne API gdzie wejscie pod /books daje listę wszystkich a /books/title wyswietla daną ksiażke.

0

@Shalom restowe API lepiej tu pasuje ale da sie chyba zmapowac tak jak on chce tym https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params-- hm? (Chyba, ze ja czegos nie zrozumialem ;) )

0
@Controller
@RequestMapping("/books")
public class BooksController {


    @Autowired
    private BookService bookService;


    @RequestMapping(value = "/all")
    public String getAllBooks(Model model) {
        model.addAttribute("books", bookService.getAllBooks());
        return "books";
    }

    @RequestMapping(value = "/book", method = RequestMethod.GET)
    public String getBookByTitle(@RequestParam("title") String bookTitle, Model model) {
        model.addAttribute("books", bookService.getBookByTitle(bookTitle));
        return "books";
    }
}

Zrobiłem osobne mappingi ale problem mam taki że jak wchodzę pod adres http://localhost:8081/GreenLibrary/books/all wyświetlają mi się wszystkie książki, na stronie wprowadzam z pole do wyszukiwania tytuł i po kliknięciu submit otwiera mi się http://localhost:8081/GreenLibrary/books/all?title=Antygona zamiast http://localhost:8081/GreenLibrary/books/book?title=Antygona

jsp jak w pierwszym poście czyli

                        <form class="navbar-form navbar-left" role="search" method="get">
                            Tytuł
                            <div class="form-group">
                                <input type="text" class="form-control" name="title"/>
                            </div>
                            <button type="submit" class="btn btn-default">
                                Szukaj
                            </button>
                        </form>
0

@Shalom a jak musiałby wyglądać jsp dla PathVariable ?
Mam na stronie pole do wyszukiwania po tytule i button submit

    @RequestMapping("/{title}")
    public String listByCategory(Model model, @PathVariable("title") String bookTitle) {
        model.addAttribute("books", bookService.getBookByTitle(bookTitle));
        return "books";
    }
0
<form action="<c:url value="/books${title}" />"  .....

gdzie c jest <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
ZNALAZŁEM, DZIAŁA :-)
Przynajmniej dla rozwiązania @RequestParam

Dalej nie wiem jak przygotować jsp dla wersji z @PathVariable

0

Tak robisz w javie:

    @RequestMapping(value = "/books/{title}", method = RequestMethod.GET)
    public String getBookByTitle(@PathVariable("title") String bookTitle, Model model) {

JSP jest troche pomotany bo formularz do szukania powinien szukac ksiazek, zwracac liste wyszukanych ksiazek i wtedy powinienes korzystac z /books/{title} zeby wyswietlic info o pojedynczej ksiazce.

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