Я впервые опробовал Spring MVC 3.0 и хотел бы сделать его RESTfull.Spring MVC 3.0 Проблема с отдыхом
Это мой контроллер:
@Controller
@RequestMapping(value = "/product")
@SessionAttributes("product")
public class ProductController {
@Autowired
private ProductService productService;
public void setProductValidator(ProductValidator productValidator, ProductService productService) {
this.productService = productService;
}
@RequestMapping(method = RequestMethod.GET)
public Product create() {
//model.addAttribute(new Product());
return new Product();
}
@RequestMapping(method = RequestMethod.POST)
public String create(@Valid Product product, BindingResult result) {
if (result.hasErrors()) {
return "product/create";
}
productService.add(product);
return "redirect:/product/show/" + product.getId();
}
@RequestMapping(value = "/show/{id}", method = RequestMethod.GET)
public Product show(@PathVariable int id) {
Product product = productService.getProductWithID(id);
if (product == null) {
//throw new ResourceNotFoundException(id);
}
return product;
}
@RequestMapping(method = RequestMethod.GET)
public List<Product> list()
{
return productService.getProducts();
}
}
У меня есть 2 вопроса по этому поводу.
Я верю в Конвенцию по конфигурации, и поэтому мои представления находятся в jsp/product/folder и называются create.jsp, list.jsp и show.jsp, которые работают относительно хорошо, пока я не добавлю атрибут @PathVariable. Когда я нажимаю root/product/show/1, я получаю следующую ошибку: ../jsp/product/show/1.jsp "не найден, как я могу сказать, что этот метод использует представление show.jsp?
Если я не добавлю RequestMapping на уровне класса, мой метод show будет сопоставлен с root/show вместо root/owner/show, как я могу это решить? Я бы хотел избежать использования класса RequestMapping.
Как я уже упоминал выше, я знаю, что существуют различные подходы к решению этой проблемы. Тем не менее, мне нравится использовать мой текущий метод и, как решение проблемы с текущим подходом/соглашением типов возврата. Это должно быть возможно с моим текущим соглашением типа возврата вместо возвращаемых типов void/String/Model/ModelAndView. Спасибо за ваш ответ, и я знаю ваше решение. – Gidogeek
Но я боюсь, что именно так Spring MVC с аннотациями ожидает, что вы вернете viewName - через возвращаемый тип метода. –
метод create() имеет возвращаемый тип продукта, но использует create.jsp, как и метод list() использует list.jsp, поэтому почему метод show() не сможет использовать show.jsp? Я ценю ваше время, и я новичок в Spring, но когда работают другие 2 примера, я не понимаю, почему show() не будет работать. – Gidogeek