Spring MVC 3.0 Rest problem

Posted by Gidogeek on Stack Overflow See other posts from Stack Overflow or by Gidogeek
Published on 2010-04-05T14:03:10Z Indexed on 2010/04/05 14:23 UTC
Read the original article Hit count: 243

Filed under:
|
|

Hi Guys,

I'm trying out Spring MVC 3.0 for the first time and like to make it RESTfull.

This is my controller:

    @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();
    }

}

I have 2 questions about this.

I'm a believer in Convention over Configuration and therefor my views are in jsp/product/ folder and are called create.jsp , list.jsp and show.jsp this works relatively well until I add the @PathVariable attribute. When I hit root/product/show/1 I get the following error: ../jsp/product/show/1.jsp" not found how do I tell this method to use the show.jsp view ?

If I don't add the RequestMapping on class level my show method will be mapped to root/show instead of root/owner/show how do I solve this ? I'd like to avoid using the class level RequestMapping.

© Stack Overflow or respective owner

Related posts about spring-mvc

Related posts about java