RestController

随着移动互联网的发展,RESTful 作为一种对移动端友好的技术也日趋火热,Spring 也提供了 RestController API 方便开发者使用。

创建一下新的类,取名为 PersonController:

@RestController
@RequestMapping("/person")
public class PersonController {
    @RequestMapping(method = RequestMethod.GET)
    public List<Person> getAllPerson() {
        List<Person> l = new ArrayList<>();
        l.add(new Person(1, "Chester"));
        return l;
    }

    @RequestMapping(value = "/{id:[\\d]+}", method = RequestMethod.GET)
    public Person getPerson(
            @PathVariable(value = "id") int id
    )
    {
        return new Person(id, "Chester");
    }
}

这里一个简单的 RestController 示例。可以看到我们用到 @RestController 这个 Annotation,如果我们点开它看,会发现它不过是很简单的一个组合:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
}

@RestController 实际上就是在 @Controller 的基础上,给所有的函数返回值增加了 @ResponseBody。因此我们在函数里不需要再指明 @ResponseBody,可以直接将 Java 对象(如 Person)返回,简化了代码的编写。

Spring 本身是不带 JSON 功能的,不过它提供了对于第三方 JSON 库的良好支持。我们通过 Maven 引入一个很常用的 JSON 库 Jackson。在 pom.xml 中的依赖部分加入下面的内容:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.7.3</version>
</dependency>

另外我们还需要修改我们的配置,加入 @EnableWebMvc

@Configuration
@EnableWebMvc
@ComponentScan("com.skyline")
public class AppConfig {
}

@EnableWebMvc 是 Spring MVC 新版本所推荐的用法,它会帮我们做很多配置工作。@EnableWebMvc 具体做的事情可以参考 Spring 官方文档。这里我们需要知道的是,@EnableWebMvc 会帮我们配置好 JSON 有关的响应 Handler。如果没有,是不能返回 JSON 响应的。

编译代码之后,将生成的代码拷贝到 Tomcat 的工作目录,同时不要忘记将 Jackson 的 jar 包也拷贝到 lib 目录下面,这样在运行时 Tomcat 才能找到正确的依赖。运行 Tomcat 在浏览器中可以看到输出:

rest-result


书籍推荐