Spring MVC 3.0 Проблема с отдыхом - PullRequest
2 голосов
/ 05 апреля 2010

Я впервые пробую Spring MVC 3.0 и хотел бы сделать его RESTfull.

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

    @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 на уровне класса.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2010

добавьте ваш 'продукт' к Model и верните String /product/show вместо Product. В вашем show.jsp вы можете получить доступ к форме объекта продукта pageContext

1 голос
/ 05 апреля 2010

Ознакомьтесь с разделом в руководстве о " Поддерживаемых аргументах метода-обработчика и возвращаемых типах ".

По сути, когда ваш метод @RequestMapping возвращает только объект, Spring использует его как один атрибут модели и, я полагаю, пытается использовать URL-адрес запроса в качестве основы для имени представления.

Самый простой способ вернуть данные вида и , которые вы хотите получить одним и тем же методом, - это, вероятно, просто вернуть метод ModelAndView, чтобы вы могли явно указать viewName и данные модели.

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