Json格式的响应正文
我们创建一个数据类,根据阿里命名规范,我们也学习下,数据类型的命名有一定规范,数据我们统一放在POJO包下,然后再分为VO,DTO等等,后面有时间再给大家详细说说,也可自行查找了解,这里我们创建一个VO类,用于响应客户端:
package cn.codingfire.springmvc.vo; public class UserVO { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
实现setter&getter方法,后面会有一个依赖帮我们来做,不需要我们显示的声明,后面再说。jackson-databind会自动调用属性的Setter / Getter方法。
在controller中添加一个新的方法:
package cn.codingfire.springmvc.controller; import cn.codingfire.springmvc.vo.UserVO; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/user") @ResponseBody public class UserController { //http://localhost:8080/springmvc_war_exploded/user/login.page @RequestMapping("/login.page") public String login() { return "login page"; } //http://localhost:8080/springmvc_war_exploded/user/info.page @GetMapping("/info.page") public UserVO userInfo() { UserVO userVO = new UserVO(); userVO.setUsername("codingfire"); userVO.setPassword("123456"); return userVO; } }
重启Tomcat,在浏览器输入新的路径,可以在浏览器看到json格式的数据:
到这里,正常的接口你已经会写了。但这还没完,我们还要去接受 客户端传递的参数,param属性即将登场。
接收请求的参数
我们新增一个注册方法:
//http://localhost:8080/springmvc_war_exploded/user/register.page @GetMapping("/register.page") public UserVO register(String username, String password) { UserVO userVO = new UserVO(); userVO.setUsername(username); userVO.setPassword(password); return userVO; }
重启Tomcat,然后在浏览器输入URL,这里要注意,有参数,get方法的参数你应该是了解的:
回车之后,发起请求,我们在浏览器看看返回的json数据是不是我们自己传入的:
非常好,达到了我们的预期。这里要注意 几点:
参数要声明为我们想要的类型,在整个过程中,Spring会尝试去转换参数类型为目标类型,如果转换失败,则会抛出异常。
参数名称也要和后端声明的一致,若是不一致,后端将无法得到请求中传入的参数,值将为null。这些值都由服务器决定,客户端需要严格遵守服务端定下的规则。
如果有必要,可在参数前声明@RequestParam注解,指定新的请求参数名,而不再使用声明的参数名。还可以在此注解中配置required属性,默认true,则客户端必传此参数,false时可不传。还可配置置defaultValue属性,设置默认值。
若是客户端提交参数较多,就需要将参数封装为对象的形式,如:
@GetMapping("/register.page") public UserVO register(UserVO user) { UserVO userVO = new UserVO(); userVO.setUsername(user.getUsername()); userVO.setPassword(user.getPassword()); return userVO; }
这样可以使代码更加简洁,我们在实际开发中也多会使用此模式。但并不是所有情况都需要封装为对象,如果参数较少,只有几个,则用显示的声明的形式更为直观和方便。可自行斟酌。
关于POJO和Model的命名
POJO即Plain Ordinary Java Object,是普通Java对象的意思,所有封装属性的对象的类统称POJO,所有POJO类都需要遵守一定的规则:
实现Serializable接口
属性私有
实现setter&getter方法,由开发工具生成,后面我们可以通过依赖自动非显示的生成
重写hashCode方法,equals方法,toString方法,这个也和前一条一样,由开发工具完成,不需要开发者操心
关于命名,后缀需要添加对应的业务领域的名字,如xxxVO,XXXDTO,且后缀需要大写。