2013-10-28 3 views
9

Я продолжаю видеть этот вид параметра value = "/redirect/{id}" в @RequestMapping аннотация весны. Мне интересно, что здесь {id}? Это что-то вроде Expression Language?Spring @RequestMapping

Пример кода, что я видел:

@RequestMapping(value = "/files/{id}", method = RequestMethod.GET) 
public void getFile(@PathVariable("id") 
String fileName, HttpServletResponse response) 
{ 
    try 
    { 
     // get your file as InputStream 
     InputStream is = new FileInputStream("/pathToFile/"+ fileName); 
     // copy it to response's OutputStream 
     IOUtils.copy(is, response.getOutputStream()); 
     response.flushBuffer(); 
    } 
    catch(IOException ex) 
    { 
     throw new RuntimeException("IOError writing file to output stream"); 
    } 

} 

Мой вопрос, что в отображении {id} и какова его связь с @PathVariable аннотацию и как его использовать? Я крашу некоторую информацию из Интернета, но я буду гораздо больше ценить ее, чтобы услышать гораздо более ясное объяснение от вас, ребята.

+2

было бы удобно закрыть 'is' в' finally' блоке – yegor256

ответ

14

Значение {foo} в значении - переменная пути, которая означает значение, полученное из URL-адреса, а не из параметра запроса.

Например, если пользователь получает доступ к /files/foo.zip, то {id} будет соответствовать foo.zip и вы говорите Spring, чтобы сохранить это значение в переменную, которая имеет аннотацию @PathVariable("id").

У вас может быть несколько переменных пути в идентификаторе URL-адреса значения аннотации @RequestMapping, и вы можете вставлять эти значения в переменные с помощью @PathVariable с тем же идентификатором, который вы использовали внутри фигурных скобок.

+0

как насчет '/ file/x = y' будет ли аннотация сохранять' x'? – user2785929

+1

Нет, если вы хотите «x = y», вам нужно передать его как '/ file /? X = y' и использовать строку @RequestParam (« x ») x', которая будет правильно удерживать значение' y' – Alex

0

Я думаю, что для вашего примера, просматривая ../files/1 или ../files/2 или ../files/3, цифры обозначают разные имена файлов. @PathVariable («id») помогает вам сэкономить время, записывая разные функции параметров с одной целью.

0

{id} - строка запроса url, которую мы передаем, когда-либо, и извлечение этого идентификатора с помощью @PathVariable («id») и передача в качестве аргумента метода, один метод подходит для разных запросов с изменением id здесь. Спасибо.

0
@RequestMapping(value = "/files/{id}", method = RequestMethod.GET) 
public void getFile(@PathVariable("id") **String id**) 
String fileName, HttpServletResponse response) 
{ 
    //your code here 
} 

pathvariable сопоставляет ваш uri с параметром метода. Здесь id - это то, что вы отправляете с вашим запросом, например./Файлы/7.

Смежные вопросы