2016-11-01 3 views
0

Интересно, существует ли возможность для метода возвращать разные вещи в зависимости от того, какой параметр был запрошен. Пример:Различные вещи, возвращенные на основе запрошенного параметра с весной?

@RestController 
public class GreetingController { 

private static final String templateForName = "Hello, %s!"; 
private static final String templateForTest = "Testing new output, which is %s!"; 

@RequestMapping("/greeting") 
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name 
         ,@RequestParam(value="test", defaultValue="TEST value") String test 
         ) { 
       //An if here that would decide which param was requested? 
       return new Greeting(String.format(templateForName, name)); 

} 

В этом случае отобразится, например, «Hello, User!». если запрошено с ?name=User Можно ли отобразить «Тестирование нового выхода, что является испытанием!» запрашивается с ?test=test

Я только начинаю делать что-либо с весны, поэтому, если что-то неясно или недостаточно информации, сообщите мне, и я попытаюсь объяснить лучше.

+0

Почему бы не просто сделать параметры частью параметра PATH, если они всегда будут иметь различное, четко определенное поведение? – Andonaeus

+0

Я не уверен, понимаю ли вы, что вы имеете в виду, не могли бы вы привести пример, пожалуйста? – ForInfinity

+0

Конечно, я добавлю ответ с примером, когда у меня есть время сегодня – Andonaeus

ответ

0

Вы можете просто добавить if else conditions вернуть правильный объект приветствия, как показано ниже:

@RequestMapping("/greeting") 
    public String greeting(@RequestParam(value="name", defaultValue="World") String name 
          ,@RequestParam(value="test", defaultValue="TEST value") String test 
          ) { 
     Greeting greeting = null; 
     if(name.equals("User")) { 
      greeting = new Greeting(String.format(templateForName, name)); 
     } else if(test.equals("test")) { 
       greeting = new Greeting(String.format(templateForTest, test)); 
     } 
     return greeting; 
    } 
+0

Спасибо! И знаете ли вы, можно ли использовать два разных '@ RequestMapping', которые используют один и тот же метод public publicType приветствие? Или, возможно, выбор из 'Map <>', если это возможно? – ForInfinity

0

За мой комментарий, используя PATH Params:

@RequestMapping("/greeting/name/{name}") 
public Greeting nameGreeting(@PathParam(value="name", defaultValue="World") String name) { 

    return new Greeting(String.format(templateForName, name)); 

} 

@RequestMapping("/greeting/test/{test}") 
public Greeting testGreeting(@PathParam(value="test", defaultValue="TEST value") String name) { 

    return new Greeting(String.format(templateForTest, test)); 

} 
0

Просто используйте один @RequestParam и тест для которую вы ищете.

@RequestMapping("/greeting") 
public String greeting(@RequestParam(value="name", defaultValue="World") String name) { 
    if(name.equals("Test")) { 
     return new Greeting(String.format(templateForTest, test)); 
    } 
    return new Greeting(String.format(templateForName, name)); 
} 
Смежные вопросы