Исключение параметра недопустимого API-запроса Spring Boot Rest: java.lang.IllegalArgumentException: значение параметра [Computer] не соответствует ожидаемому типу - PullRequest
0 голосов
/ 13 декабря 2018

Как реализовать поиск из OneToMany сущностей?У меня есть Book and Категории` моделей доменов.

public class Category {
   private long id;
   private String name;
   @OneToMany(mappedBy = "category", cascade = CascadeType.ALL)
   private Set<Book> books;
}

public class Book {
   private long id;
   private String title;
   @ManyToOne
   @JoinColumn(name = "category_id")
   private Category category;
}

Это мой метод в моем контроллере:

@GetMapping("/books")
public String findAll(Model model, @RequestParam(value = "category", required = false) String category) {
   if (category != null && !category.isEmpty()) {
      model.addAttribute("books", bookService.findByCategory(category));
   } else {
      model.addAttribute("books", bookService.findAll());
   }

   return "book/findAll";
}

Мой сервис:

@Override
public Iterable<Book> findByCategory(String category) {
   return bookRepository.findByCategory(category);
}

И мойхранилище:

Iterable<Book> findByCategory(String category);

По запросу /books/?category=Computer в браузере возникает следующая ошибка:

There was an unexpected error (type=Internal Server Error, status=500).
Parameter value [Computer] did not match expected type [io.github.julianjupiter.springbootjpamanytoone.domain.Category (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [Computer] did not match expected type [io.github.julianjupiter.springbootjpamanytoone.domain.Category (n/a)]

Спасибо.

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

удалить / после

books

и попробовать в своем хранилище

 Iterable <Book> findByCategoryName(String categoryName);
0 голосов
/ 13 декабря 2018

Если вы видите, что ваш метод сопоставления запросов имеет @RequestParam not @PathVariable.

@GetMapping("/books")
public String findAll(Model model,@RequestParam(value = "category", required = false) String category) {
...
...
...
// Your Code
}

Итак, правильный способ разместить запрос с QueryParam / RequestParam будет

/books?category=Computer // this request enables to get the service /books with request param (name = category) with value = Computer.

не так

/books/?category=Computer  // this request is a invalid request.

Если ваше отображение такое

    @GetMapping("/books/category/{categoryName}")
    public String findAll(Model model,@PathVariable("categoryName") String category) {
    ...
    ...
    ...
    // Your Code
    }

, тогда этот запрос действителен для этого Rest-API

/books/category/Computer  // this request is a valid now.
0 голосов
/ 13 декабря 2018

Параметры запроса используются следующим образом:

/books?category=Computer

Удалить /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...