使用路径变量增强Hello World服务

本文概述

  • 创建用户Bean和用户服务
  • 实现用户资源的获取方法
@PathVariable批注用于从URI中提取值。它最适合URL包含某些值的RESTful Web服务。 Spring MVC允许我们在同一方法中使用多个@PathVariable批注。路径变量是创建剩余资源的关键部分。
我们将创建另一个带有path参数的hello-world-bean请求。
步骤1:打开HelloWorldController.java文件, 并添加另一个helloWorldBean()服务。
HelloWorldController.java
package com.srcmini.server.main; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.context.annotation.Configuration; @Configuration//Controller@RestControllerpublic class HelloWorldController {//using get method and hello-world URI@GetMapping(path="/hello-world")public String helloWorld(){return "Hello World"; }@GetMapping(path="/hello-world-bean")//method- which returns "Hello World"public HelloWorldBean helloWorldBean(){return new HelloWorldBean("Hello World"); //constructor of HelloWorldBean}//passing a path variable@GetMapping(path="/hello-world/path-variable/{name}")public HelloWorldBean helloWorldPathVariable(@PathVariable String name){return new HelloWorldBean(String.format("Hello World, %s", name)); //%s replace the name}}

无论我们将传递给path变量的任何值, 控制器都会将其拾取并返回到响应。
步骤2:输入URL http:// localhost:8080 /// hello-world / path-variable / srcmini
步骤3:运行HelloWorldController.java文件。我们在浏览器上收到以下响应。
使用路径变量增强Hello World服务

文章图片
让我们再次更改路径变量:http:// localhost:8080 / hello-world / path-variable / Anubhav
使用路径变量增强Hello World服务

文章图片
我们可以看到, 我们在path变量中编写的任何内容都将返回给响应。
创建用户Bean和用户服务 在本节中, 我们将创建实际资源用户和该职位。我们将使用静态数组列表来表示数据。
步骤1:创建一个名为com.srcmini.server.main.user的新包。
步骤2:创建一个bean类(用户)来存储用户详细信息。
右键单击软件包用户-> 新建-> 类-> 提供名称-> 完成。在这里, 我们提供了类名User。
步骤3:定义三个私有变量id, name和dob。
步骤4:生成Getter和Setter。
右键单击文件-> 源-> 生成Getter和Setters … -> 全选-> 生成。
步骤5:生成toString。
右键单击文件-> 源-> 生成toString … -> 全选-> 生成。
步骤6:生成构造函数。
右键单击文件-> 源-> 使用字段生成构造器-> 生成。
User.java
package com.srcmini.server.main.user; import java.util.Date; public class User {public User(Integer id, String name, Date dob) {super(); this.id = id; this.name = name; this.dob = dob; }private Integer id; private String name; private Date dob; public Integer getId() {return id; }public void setId(Integer id) {this.id = id; }public String getName() {return name; }public void setName(String name) {this.name = name; }public Date getDob() {return dob; }public void setDob(Date dob) {this.dob = dob; }@Overridepublic String toString() {//return "User [id=" + id + ", name=" + name + ", dob=" + dob + "]"; return String.format("User [id=%s, name=%s, dob=%s]", id, name, dob); }}

在进行下一步之前, 首先将com.srcmini.server.main.helloworld包中的HelloWorldBean.java和HelloWorldController.java移动。
步骤7:在包com.srcmini.server.main.user中创建一个名称为UserDaoService的类。
UserDaoService.java
package com.srcmini.server.main.user; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.springframework.stereotype.Component; @Componentpublic class UserDaoService {public static int usersCount=5; //creating an instance of ArrayListprivate static List< User> users=new ArrayList< > (); //static block static{//adding users to the listusers.add(new User(1, "John", new Date())); users.add(new User(2, "Robert", new Date())); users.add(new User(3, "Adam", new Date())); users.add(new User(4, "Andrew", new Date())); users.add(new User(5, "Jack", new Date())); }//method that retrieve all users from the listpublic List< User> findAll(){return users; }//method that add the user in the list public User save(User user){if(user.getId()==null){//increments the user iduser.setId(++usersCount); }users.add(user); return user; }//method that find a particular user from the listpublic User findOne(int id){for(User user:users){if(user.getId()==id)return user; }return null; }}

实现用户资源的获取方法 步骤8:现在创建一个名称为UserResource的用户控制器类。
UserResource.java
package com.srcmini.server.main.user; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestControllerpublic class UserResource {@Autowiredprivate UserDaoService service; @GetMapping("/users")public List< User> retriveAllUsers(){return service.findAll(); }}

步骤9:运行应用程序, 然后在浏览器的地址栏中键入localhost:8080 / users。它以JSON格式返回用户列表。
使用路径变量增强Hello World服务

文章图片
如果日期以默认时间戳格式显示为:
“时间”:“ 1500370250075”
我们需要设置正确的日期格式。
打开application.properties文件。删除调试配置并添加以下配置:
spring.jackson.serialization.write-dates-as-timestamps=false

上面的声明告诉Jackson框架, 序列化时不要将日期视为时间戳。
步骤10:如果我们想在浏览器上显示特定的用户详细信息, 请添加映射“ / user / {id}”, 并在UserResource中创建方法retriveUser()。
UserResource.java
package com.srcmini.server.main.user; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestControllerpublic class UserResource {@Autowiredprivate UserDaoService service; @GetMapping("/users")public List< User> retriveAllUsers(){return service.findAll(); }//retrieves a specific user detail@GetMapping("/users/{id}")public User retriveUser(@PathVariable int id){return service.findOne(id); }}

步骤11:运行应用程序, 然后在浏览器中键入localhost:8080 / users / {id}。它返回我们在path变量中传递的特定用户ID的详细信息。
【使用路径变量增强Hello World服务】在下图中, 我们检索了ID为4的用户的详细信息。
使用路径变量增强Hello World服务

文章图片

    推荐阅读