如何用Spring创建restfulweb服务

时间:2020-02-23 14:34:17  来源:igfitidea点击:

当我们处理restfulweb服务时,我们需要使用@RestController注释,它基本上代表@Controller和@ResponseBody注释。

当我们在方法中使用@RequestMapping时,我们可以添加一个名为products的属性,它指定发送给用户的输出将是JSON格式。

示例

Employee.java

public class Employee {
 private int id;
 private String firstName;
 private String lastName;

 public Employee(int id, String firstName, String lastName) {
    this.id = id;
    this.firstName = firstName;
    this.lastName = lastName;
 }

 public setFirstName(String fName) {
    firstName = fName;
 }

 public setLastName(String lName) {
    lastName = lName;
 }

 public int getId() {
    return id;
 }

 public String getFirstName() {
    return firstName;
 }

 public String getLastName() {
    return lastName;
 }
}

EmployeeController.java

controller类将用于处理HTTP请求,这是我们构建restfulweb服务时的惯例。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmployeeController {
  @RequestMapping("/employee")
  public Employee createEmployee(@RequestParam(value="id") int employeeId, @RequestParam(value="firstName") String fName, @RequestParam(value="lastName") String lName) {		
	//return the new Employee object with that id, first name and last name
	return new Employee(employeeId, fName, lName);
  }
}

让我们分解控制器类。第一眼看上去很简单,但事实上,幕后发生了很多事情。我来解释一下。

多亏了@RequestMapping,我们*将路径“/employee”映射到getEmployeeId方法,如果我们不熟悉@RequestMapping注释,当我们不指定方法请求时,它将默认映射所有HTTP操作。如果我们只想将它作为一个GET方法(在我们的示例中更合适),我们将把上面的代码更改为以下代码:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmployeeController {    
  @RequestMapping("/employee", method=RequestMethod.GET)
  public Employee createEmployee(@RequestParam(value="id") int employeeId, @RequestParam(value="firstName") String fName, @RequestParam(value="lastName") String lName) {        		
	// return the new Employee object with that id, first name and last name 
      return new Employee(employeeId, fName, lName);
  }
}

所以现在我们将@RequestMapping注释改为 **@RequestMapping(“/employee”,方法)=请求方法.GET)正如我在本教程开头所说的,我们还指定希望结果是JSON格式的。所以我们可以更改 **@RequestMapping(”/employee“,方法=请求方法.GET)]到 **@RequestMapping(“/employee”,方法)=请求方法.GET,products=“application/json”)。]

我们将查询参数“id”提取为“employeeId”,将“firstName”提取为“fName”,将“lastName”提取为“lName”,然后实例化一个 newEmployee对象,并将获取的id、first name和last name作为查询参数传递。

要检索这些参数并使用此方法创建Employee对象,URL将如下所示:

**http://localhost:8080/员工?id=x&firstName=xx&lastName=xxx]

再次感谢@RequestParam,我们得到了这些x并将它们存储到方法参数中。

运行应用程序

要运行应用程序,我们将使用main()方法,该方法如下所示:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
  }
}

这个SpringApplication.run()启动应用程序并执行所有操作。这是最简单的方法,但是如果我们愿意,我们可以将其作为可执行JAR,或者使用Gradle或者Maven从命令行运行它。你的选择。

回应

JSON格式的响应体如下所示:

{
 "id":x, firstName="xx", lastName="xxx"
}