2014-09-11 23 views
5

Reading this (Spring 3) bài báo từ năm 2010, nó thảo luận về cách sử dụng một phần mở rộng để cung cấp một cách thuận tiện để bao gồm các đoạn đường bắt buộc:đoạn đường bắt buộc trong Spring MVC

@RequestMapping("/houses/[preview/][small/]{id}") 
public String handlePreview(@PathVariable long id, @PathVariable("preview/") boolean preview, @PathVariable("small/") boolean small) { 
    return "view"; 
} 

Tôi biết tôi chỉ có thể thực hiện một số ánh xạ yêu cầu để đạt được hiệu quả tương tự:

@RequestMapping(value="/houses/preview/{id}") 
... 

@RequestMapping(value="/houses/{id}") 
... 
~~~ snip ~~~ 

Nhưng tùy thuộc vào số hoán vị có thể, nó có vẻ như một tùy chọn rất dài dòng.

Phiên bản sau của Spring (sau 3) có cung cấp cơ sở như vậy không? Ngoài ra, có cơ chế nào để chuỗi các phần của URL yêu cầu để cấp một chữ ký phương thức phản hồi lớn hơn không?

Cập nhật

This answer cho một câu hỏi liên quan đến biến đường dẫn chia sẻ và yêu cầu các thông số cho thấy một cách tiếp cận như:

@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"}) 
    @ResponseBody 
    public String getCampaignDetails(
     @PathVariable("id") String id) 
    { 
     ~~~ snip ~~~ 

Nhưng biến con đường không thể được thiết lập để null. Chỉ cần truy cập /campaigns sẽ trả về 400 phản hồi.

+1

Bạn có muốn như http://stackoverflow.com/questions/2745471/spring- web-mvc-use-same-request-mapping-for-request-parameter-và-path-variable # 2746361 –

+0

Gần như, câu trả lời của Javi với nhiều giá trị yêu cầu - 'value = {"/campaign ","/campaigns/{ id} "}' rất gần đó, nhưng tôi muốn ánh xạ các phân đoạn cố định trong URL. – Mikaveli

+0

câu hỏi này đã được thảo luận trên một diễn đàn, đây là cùng một yêu cầu ở đây: http://java.dzone.com/articles/spring-3-webmvc-optional-path –

Trả lời

8

Lý do bạn không sử dụng java.util.Optional nếu bạn đang sử dụng Java 1.8. Để lấy một ví dụ sau, bạn có thể ngăn chặn một phản ứng 400 với đặt một Optional<String> thay vì String đại diện cho con đường eventualy của bạn như thế này:

@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"}) 
@ResponseBody 
public String getCampaignDetails(
    @PathVariable("id") Optional<String> id) 
{ 
    if(id.isPresent()){ 
     model.addAttribute("id", id.get());//id.get() return your String path 
    } 
} 
Các vấn đề liên quan