我想以以下格式将参数传递给Web服务:

http://.../greetings/neil/1

而不是

http://.../greetings?name=neil&id=1

因此,我更改了代码(请注意,我只在代码中包含了第一个参数):

@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
    return new Greeting(counter.incrementAndGet(),
                        String.format(template, name));
}

至:
@RequestMapping
public Greeting greeting(@PathVariable String name) {
    return new Greeting(counter.incrementAndGet(),
                        String.format(template, name));
}

可以,但是我不知道如何向@PathVariable添加默认值,例如:

http://.../greetings/

http://.../greetings/neil/

会像处理查询参数一样工作。

我该怎么做呢?我以为可能会传递null,但只会产生页面错误。

我猜答案可能是添加多个重载,但这听起来有点困惑。

谢谢。

谢谢。

最佳答案

下面的方式呢?我正在使用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));
}

或者,您可以定义两个单独的请求映射处理程序:
@RequestMapping("/greeting")
public Greeting defaultGreeting()


@RequestMapping("/greeting/{name}")
public Greeting withNameGreeting(@PathVariable String name)

10-08 01:47