赞
踩
目录
在学习请求这一内容时,我使用的工具是IDEA和Postman,所以后面进行展示请求示例的都是Postman来调试出的。
此部分内容包括:简单参数、实体参数、数组集合参数、日期参数、Json参数、路劲参数。
注:在postman中,使用上面的代码,postman里的KEY变量名要与代码的一致,否则IDEA后端部分接受值将为null。
下面是示例代码:
- @RestController
- public class RequestController {
-
- //原始方式
- @RequestMapping("/simpleParam")
- public String simpleParam(HttpServletRequest request){
- //获取请求参数
- String name=request.getParameter("name");
- String ageStr=request.getParameter("age");
-
- int age=Integer.parseInt(ageStr);
- System.out.println(name+":"+age);
- return "OK";
- }
-
- //SpringBoot方式
- @RequestMapping("/simpleParam")
- public String simpleParam(String name,Integer age){
- System.out.println(name+":"+age);
- return "OK";
- }
-
- //SpringBoot方式
- @RequestMapping("/simpleParam")
- public String simpleParam(@RequestParam(name="name") String username, Integer age){
- System.out.println(username+":"+age);
- return "OK";
- }
-
- }
实体参数里采用了Java的封装,能更好地实现多元素变量的接收使用。
代码示例:
- @RestController
- public class RequestController {
-
- //实体参数
- @RequestMapping("/simpleProa")
- public String simpleProa(User user){
- System.out.println(user);
- return "OK";
- }
-
- }
-
- public class User {
- private String name;
- private Integer age;
- private Address address;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- public Address getAddress() {
- return address;
- }
-
- public void setAddress(Address address) {
- this.address = address;
- }
-
- @Override
- public String toString() {
- return "User{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", address=" + address +
- '}';
- }
- }
-
- public class Address {
- private String province;
- private String city;
-
- public String getProvince() {
- return province;
- }
-
- public void setProvince(String province) {
- this.province = province;
- }
-
- public String getCity() {
- return city;
- }
-
- public void setCity(String city) {
- this.city = city;
- }
-
- @Override
- public String toString() {
- return "Address{" +
- "province='" + province + '\'' +
- ", city='" + city + '\'' +
- '}';
- }
- }
数组集合参数可以实现统一元素变量的多个数值传递获取,更加高效,且在已有集合的情况下,最好多使用集合,数组在一些方面会降低效率,且开发普遍用的是集合。
代码示例:
- @RestController
- public class RequestController {
-
- //数组集合参数
- @RequestMapping("/arrayParams")
- public String arrayParams(String[] hobby) {
- System.out.println(Arrays.toString(hobby));
- return "OK";
- }
- //数组集合参数
- @RequestMapping("/listParams")
- public String listParams(@RequestParam List<String> hobby){
- System.out.println(hobby);
- return "OK";
- }
-
- }
注:想要前端部分的日期数据能完整反馈到后端上,后端的代码要遵循标准格式,前端的数据格式也要相同,且如果月份、日为个位数时,前面要加个0。
代码示例:
- @RestController
- public class RequestController {
-
- //日期时间参数
- @RequestMapping("/datePramaw")
- public String datePramaw(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime ut){
- System.out.println(ut);
- return "OK";
- }
-
- }
在Postman里使用Json参数时就得进行部分切换操作,且Json的输出格式也不同。
代码示例:
- @RestController
- public class RequestController {
-
- //json参数
- @RequestMapping("/jsonParam")
- public String jsonParam(@RequestBody User user){
- System.out.println(user);
- return "OK";
- }
-
- }
-
- package org.start.pro;
-
- public class User {
- private String name;
- private Integer age;
- private Address address;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- public Address getAddress() {
- return address;
- }
-
- public void setAddress(Address address) {
- this.address = address;
- }
-
- @Override
- public String toString() {
- return "User{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", address=" + address +
- '}';
- }
- }
-
- package org.start.pro;
-
- public class Address {
- private String province;
- private String city;
-
- public String getProvince() {
- return province;
- }
-
- public void setProvince(String province) {
- this.province = province;
- }
-
- public String getCity() {
- return city;
- }
-
- public void setCity(String city) {
- this.city = city;
- }
-
- @Override
- public String toString() {
- return "Address{" +
- "province='" + province + '\'' +
- ", city='" + city + '\'' +
- '}';
- }
- }
-
图中上面是一个路径参数的传递,下面是两个路径参数的传递,如果要实现多个路径参数的传递,可以参考下面部分。
代码示例:
- @RestController
- public class RequestController {
-
- //路径参数
- @RequestMapping("/path/{id}")
- public String pathParam(@PathVariable Integer id){
- System.out.println(id);
- return "OK";
- }
-
- @RequestMapping("/path/{id}/{name}")
- public String pathParamq(@PathVariable Integer id,@PathVariable String name){
- System.out.println(id+":"+name);
- return "OK";
- }
- }
学习响应数据的设置。
注:对于响应结果的设置我们一般有统一的模板规范,以便于后续前后端交流。
代码示例:
- package org.start.controller;
-
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.start.pro.Address;
- import org.start.pro.Result;
-
- import java.util.ArrayList;
- import java.util.List;
-
- @RestController
- public class ResponseController {
-
- // @RequestMapping("/hello")
- // public String hello(){
- // System.out.println("Hello World!");
- // return "Hello World~";
- // }
- //
- // @RequestMapping("/getAddr")
- // public Address getAddr(){
- // Address addr=new Address();
- // addr.setProvince("广东");
- // addr.setCity("深圳");
- // return addr;
- // }
- //
- // @RequestMapping("/listAddr")
- // public List<Address> listAddr(){
- // List<Address> list=new ArrayList<>();
- // Address addr=new Address();
- // addr.setProvince("广东");
- // addr.setCity("深圳");
- //
- // list.add(addr);
- // return list;
- // }
-
- @RequestMapping("/hello")
- public Result hello(){
- System.out.println("Hello World!");
- //return new Result(1,"success","Hello World~");
- return Result.success("Hello World~");
- }
-
- @RequestMapping("/getAddr")
- public Result getAddr(){
- Address addr=new Address();
- addr.setProvince("广东");
- addr.setCity("深圳");
- return Result.success(addr);
- }
-
- @RequestMapping("/listAddr")
- public Result listAddr(){
- List<Address> list=new ArrayList<>();
- Address addr=new Address();
- addr.setProvince("广东");
- addr.setCity("深圳");
-
- list.add(addr);
- return Result.success(list);
- }
- }
上面内容提供了普通书写的设置代码和标准化后的设置代码。
三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。
三层架构区分层次的目的是为了 “高内聚,低耦合”。开发人员分工更明确,将精力更专注于应用系统核心业务逻辑的分析、设计和开发,加快项目的进度,提高了开发效率,有利于项目的更新和维护工作。
以后的后端开发大多都遵循这一体系。
分层解耦也是软件架构设计中经常会接触到的概念。其关键思想在于将整个系统分离为不同的层级,每一层都对一个特定的关注点进行抽象。常见的分层解耦架构包括表示层、业务逻辑层和数据访问层,每一层都有其独立的功能,而且层与层之间只通过接口交互,减少相互之间的依赖关系。
当service层的代码内容发生改变时,controller层也要同步改变,这时就出现了耦合,此时就要引入容器了。
在Java Web开发中,容器(Container)是一个服务器扩展,允许处理 Servlet、JSP、JSF、filters等。根据处理的内容,我们可以将容器主要划分为两类,他们是:Servlet 容器和 EJB 容器。
Servlet 容器,又称为Web 容器,它是运行在Web服务器上的一个组件,主要负责管理并执行Web应用中的Servlet和JSP等内容。
EJB 容器或企业级JavaBeans容器则是位于业务层的服务,并主要负责执行如安全性和事务管理等的服务器级服务。
这两种容器均为Java EE规范的一部分。容器通过对组件的生命周期进行管理来帮助实现分层和解耦。
使用注解便可实现功能。
注:代码缺失,建议去找代码案例看看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。