Open4

今更ながらSpring Frameworkを使ってみる

rikusen0335rikusen0335

アノテーションについての色々

@GetMapping(pathname)
pathnameにgreetingなどを入れることによって、ルートを実現する

例:

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

これによって、/greetingないし/greeting?name=UserのようにすればHello, User!のような結果を得られる。

また、

@GetMapping("/greeting/{name}")
public Greeting greeting(
    @PathVariable String name
) {
    return new Greeting(counter.incrementAndGet(), String.format(template, name));
}

このようなコードにすることで、/greeting/hogeのようなよくあるルートを実現できる。
この場合、Hello, hoge!のような結果が得られる。

rikusen0335rikusen0335

@RestController
https://spring.pleiades.io/guides/gs/rest-service/ より、

これは、すべてのメソッドがビューではなくドメインオブジェクトを返すコントローラーとしてクラスをマークします。

らしい。

例によって、例えばこのようなサンプルに、上記したアノテーションを使うことでJSONを返すルートを定義できる:

@RestController
public class GreetingController {
    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting/{name}")
    public Greeting greeting(
        @PathVariable String name
    ) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}

rikusen0335rikusen0335

Todo用のページを作りたいときに、

@RequestMapping("/api")
public class TodoController {}

とした場合、バージョニングはどうするのが適切なんだろうか?

例えば/api/v1/todo用のメソッドを定義する場合には

@RequestMapping("/api")
public class TodoController {
    @RequestMapping(value = "/v1/todo", method = RequestMethod.GET)
    public Todo todo() { /* some code */ }
}

とするのが適切だと思うが、もしこれがv2になった場合、/api/{apiVersion}/todoみたいな感じで定義したいよねと思う