前端请求并添加在数据库中数据(以添加品牌为例)Spring MVC框架基础
在项目的根包下,创建pojo.dto.BrandAddNewDTO
类,此类用于封装”增加品牌“时客户端需要提交的请求参数:
@Data
public class BrandAddNewDTO implements Serializable {
private String name;
private String pinyin;
private String logo;
private String description;
private String keywords;
private Integer sort;
private Integer enable;
}
在项目的根包下,创建controller.BrandController
类,在类上添加@RestController
:
@RestController
public class BrandController {
@Autowired
BrandMapper brandMapper;
// http://localhost:9080/add-new?name=格力&pinyin=geli&sort=67&description=格力的简介&enable=1&keywords=不知道写什么关键词&logo=还没有上传logo
@RequestMapping("/add-new")
public String addNew(BrandAddNewDTO brandAddNewDTO) {
System.out.println("即将处理【添加品牌】的请求……");
System.out.println("brandAddNewDTO = " + brandAddNewDTO);
// 检查品牌名称是否已经被占用
int count = brandMapper.countByName(brandAddNewDTO.getName());
if (count > 0) {
return "增加品牌失败!品牌名称【" + brandAddNewDTO.getName() + "】已经被占用!";
}
Brand brand = new Brand();
BeanUtils.copyProperties(brandAddNewDTO, brand);
brand.setSales(0);
brand.setProductCount(0);
brand.setCommentCount(0);
brand.setPositiveCommentCount(0);
brandMapper.insert(brand);
return "已经完成处理【添加品牌】的请求";
}
// http://localhost:9080/delete
@RequestMapping("/delete")
public String delete() {
System.out.println("即将处理【删除品牌】的请求……");
return "已经完成处理【删除品牌】的请求";
}
}
关于控制器的基本使用:
- 仅当添加了
@Controller
注解后,此类才算是”控制器类“(才可以接收请求、响应结果) - 在方法上使用
@RequestMapping
可以配置某个路径,后续,客户端可以向此路径发起请求,则此方法将自动执行,所以,此方法可称之为”处理请求的方法“ - 在默认情况下,处理请求的方法的返回值是
String
时,返回的结果表示某个视图的名称 - 在方法上添加
@ResponseBody
注解,将表示此方法是”响应正文“的,方法的返回结果将直接响应到客户端 @ResponseBody
注解还可以添加在控制器类上,将表示此控制器类中所有处理请求的方法都是响应正文的@RestController
将同时具有@Controller
和@ResponseBody
的效果,这一点,可以从@RestController
中看到
关于处理请求的方法:
- 访问权限:应该是
public
- 返回值类型:使用
int
- 方法名称:自定义
- 参数列表:按需设计,可以直接将所需的请求参数声明为方法的参数,或者,将多个请求参数封装到自定义类型中,并使用自定义类型作为处理请求的方法的参数,各参数可以按照期望的数据类型进行设计,如果有多个参数,不区分先后顺序
关于接收请求参数:
- 如果客户端正确的按照名称提交了请求参数,则服务器端可以正常接收到,如果不是字符串类型,会尝试自动的转换数据类型,如果转换失败,将出现错误,且响应
400
http://localhost:9080/add-new?name=小米&pinyin=xiaomi
- 如果客户端提交了对应的请求参数名称,却没有提交值,则服务器端默认视为空字符串,如果请求参数是其它类型(例如
Integer
),框架会放弃转换类型,仍保持为null
http://localhost:9080/add-new?name=&pinyin=
- 如果客户端没有提交对应名称的请求参数,则服务器端接收到的为
null
http://localhost:9080/add-new