我想以下列格式将参数传递给我的Web服务:
而不是
HTTP://.../greetings名称=尼尔&ID = 1
所以我改变了我的代码(注意,我只包含了代码中的第一个参数):
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
Run Code Online (Sandbox Code Playgroud)
至:
@RequestMapping
public Greeting greeting(@PathVariable String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我不知道如何将默认值添加到@PathVariable,以便例如:
可以像查询参数一样工作.
我该怎么做呢?我想也许它会传递null,但它只会产生页面错误.
我想答案可能是添加多个重载,但听起来有点混乱.
谢谢.
谢谢.
Spring 5 / Spring Boot 2示例:
@RequestMapping({"/greeting-blocking/{name}","/greeting-blocking/"})
public ResponseEntity<User> greetingBlocking(
@PathVariable(name = "name", required = false) String name) {
String username = StringUtils.isEmpty(name) ? "anonymous" : name;
return ResponseEntity.ok().body(User.create(username));
}
@RequestMapping({"/greeting-reactive/{name}","/greeting-reactive/"})
public Mono<ResponseEntity<User>> greetingReactive(
@PathVariable(name = "name", required = false) String name) {
String username = StringUtils.isEmpty(name) ? "anonymous" : name;
return userReactiveRepo.findByName(username).map(user -> ResponseEntity.ok().body(user));
}
Run Code Online (Sandbox Code Playgroud)
以下方式怎么样?我正在使用java.util.Optional类,它充当可以为null或非null的对象的包装器.
@RequestMapping
public Greeting greeting(@PathVariable Optional<String> name) {
String newName = "";
if (name.isPresent()) {
newName = name.get() //returns the id
}
return new Greeting(counter.incrementAndGet(),
String.format(template, newName));
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以定义两个单独的请求映射处理程序:
@RequestMapping("/greeting")
public Greeting defaultGreeting()
Run Code Online (Sandbox Code Playgroud)
和
@RequestMapping("/greeting/{name}")
public Greeting withNameGreeting(@PathVariable String name)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12501 次 |
| 最近记录: |