Spring MVC 4 RESTFul使用@RestController

使用 Spring Java配置而不使用XML。

使用 pom.xml 更新所需的依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.dhb.demo</groupId>
  <artifactId>spring4MVCHelloWorldNoXMLDemo</artifactId>
  <packaging>war</packaging>
  <version>0.1.0-SNAPSHOT</version>
  <name>spring4MVCHelloWorldNoXMLDemo Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <properties>
    <jetty.context>/</jetty.context>
    <jetty.http.port>9089</jetty.http.port>
    <jetty.https.port>9444</jetty.https.port>
    <jetty.stopPort>10081</jetty.stopPort>

    <spring.version>4.1.4.RELEASE</spring.version>
  </properties>

  <dependencies>
    <!-- spring -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.3.4</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <showWarnings>true</showWarnings>
        </configuration>
      </plugin>

      <!--maven jetty 插件配置-->
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.2.17.v20160517</version>
        <configuration>
          <webApp>
            <contextPath>${jetty.context}</contextPath>
          </webApp>
          <httpConnector>
            <port>${jetty.http.port}</port>
          </httpConnector>
          <stopKey>jetty</stopKey>
          <stopPort>${jetty.stopPort}</stopPort>
          <!--<scanIntervalSeconds>2</scanIntervalSeconds>-->
        </configuration>
      </plugin>
    </plugins>
    <finalName>Spring4MVCHelloWorldNoXMLDemo</finalName>
  </build>
</project>

和上一篇博客有一个显着的区别: 我们已经包括一个依赖于Jackson 库(jackson-mapper-asl),其将用于所述响应数据转换成JSON字符串。
对于Spring 4.1.x 和以上, jackson-databind 2.3或以上是推荐使用的,以避免转换问题。
安全的选择,你可以包括 jackson-databind 最新版本。

添加一个POJO域对象

package com.dhb.springmvc.entity;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * Created by ${denghb} on 2016/8/1.
 */
public class User {
    String name;
    String password;

    public User(){

    }
    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }


}

上述对象将从控制器返回 Jackson 转换成 JSON 的格式。

添加控制器
在 src/main/java 包下添加控制器类

package com.dhb.springmvc.controller;

import com.dhb.springmvc.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Created by ${denghb} on 2016/7/31.
 */
@RestController
@RequestMapping("/springmvc")
public class HelloWorldController {
    @RequestMapping(value = "/{name}", method = RequestMethod.GET)
    public String sayHello(@PathVariable String name) {
        return name;
    }

    @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET)
    public User user(@PathVariable String name) {
        User user = new User(name, "hello "+ name);
        return user;
    }

}

@PathVariable表示参数将被绑定到变量 URI 模板。更有趣的事情,这里要注意的是,这里我们使用的是 @RestController 注解,这标志着这个类作为控制器,每一个方法返回域对象pojo代替一个视图。这意味着我们不再使用视图解析器,我们不再直接发送响应的HTML,我们只发送的域对象转换成格式。在我们的例子中,由于 jackson 包含在类路径中,消息对象将转换成JSON格式。

添加配置类

/**
 * Created by ${denghb} on 2016/7/31.
 */
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.dhb.springmvc")
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        //super.configureDefaultServletHandling(configurer);
        configurer.enable(); //配置静态文件处理
    }
}

在这里,这个类是主要提供组件,扫描和注释支持,和静态文件处理。需要注意的是,我们没有任何视图解析器配置,因为我们在Rest案例并不需要。

添加初始化类

package com.dhb.springmvc.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * Created by ${denghb} on 2016/7/31.
 */
public class DhbWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { return null; };
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // return new Class<?>[0];
        return new Class [] { WebConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

构建和部署应用程序

访问:http://localhost:9089/springmvc/hello/denghb,看到json输出

XML输出,可以让XML输出支持以及JSON输出

package com.dhb.springmvc.entity;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * Created by ${denghb} on 2016/8/1.
 */
//@XmlRootElement(name = "demo")
@XmlRootElement
public class User {
    String name;
    String password;

    public User(){

    }
    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    @XmlElement
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }


}

编译,部署并再次运行它,会看到下面的输出(注意URL后缀),访问

http://localhost:9089/springmvc/hello/denghb.json



如果没有任何后缀,默认格式是XML:(备注:这个在google浏览器里不行,需要在后面加上.xml才能显示下图效果)



  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@RestController 是一个注解,它结合了 @Controller 和 @ResponseBody 注解的功能,用于简化开发 RESTful 接口的控制器。 要使用 @RestController,你需要按照以下步骤进行操作: 1. 在 Spring Boot 项目中引入相关的依赖。确保你的项目正确配置了 Spring MVCSpring Web 模块。 2. 在你的控制器类上添加 @RestController 注解。这将告诉 Spring 这是一个 RESTful 接口的控制器。 3. 使用 @RequestMapping 或其他相关注解来定义接口的请求路径和 HTTP 方法。例如,可以使用 @GetMapping、@PostMapping、@PutMapping 或 @DeleteMapping 注解来分别处理 GET、POST、PUT 和 DELETE 请求。 4. 在每个请求处理方法上添加 @ResponseBody 注解,以指示返回的数据需要直接作为响应体返回给客户端。你可以返回 Java 对象或集合,Spring 会自动将其转换为 JSON 或其他格式。 以下是一个简单的示例: ``` @RestController @RequestMapping("/api/users") public class UserController { @GetMapping("/{id}") public User getUserById(@PathVariable Long id) { // 根据用户 id 查询用户信息 User user = userRepository.findById(id); return user; } @PostMapping("/") public User createUser(@RequestBody User user) { // 创建用户 userRepository.save(user); return user; } @PutMapping("/{id}") public User updateUser(@PathVariable Long id, @RequestBody User user) { // 根据用户 id 更新用户信息 user.setId(id); userRepository.save(user); return user; } @DeleteMapping("/{id}") public void deleteUser(@PathVariable Long id) { // 根据用户 id 删除用户 userRepository.deleteById(id); } } ``` 这是一个简单的用户管理接口示例,使用RESTful 风格的请求路径和对应的 HTTP 方法。通过在控制器类上添加 @RestController 注解,以及在处理方法上添加 @GetMapping、@PostMapping、@PutMapping 和 @DeleteMapping 注解,我们可以轻松地创建符合 RESTful 接口规范的控制器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值