最全Spring框架(四)SpringMVC基础,使用Hystrix的插件机制

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

@PostMapping(“/login”)

public void login(String username, String password){…}

}

4.2.2 @RequestParam注解绑定参数

如果名称不一样,可以通过@RequestParam注解配置参数

@PostMapping(“/login”)

public void login(@RequestParam(“username”)String uname,

@RequestParam(“password”)String pwd){

}

4.2.3 对象绑定参数

通过对象也可以进行参数绑定

实体类

public class User {

private String username;

private String password;

}

方法定义

@PostMapping(“/login”)

public void login(User user){

}

4.2.4 @PathVariable绑定参数

通过URL的路径也可以实现参数绑定,需要给参数添加@PathVariable注解

在URL中可以使用{name}来定位参数的位置,name是@PathVariable注解中配置的名称

@GetMapping(“/login/{username}/{password}”)

public void login(@PathVariable(“username”)String username,

@PathVariable(“password”)String password){

System.out.println(username);

System.out.println(password);

}

在浏览器输入:http://localhost:8080/user/login/admin/123456

可以看到账号和密码的输出,当然登录不适合将账号和密码添加到URL中,这里只是测试

4.2.5 通过Map集合进行参数绑定

在实体类中添加Map集合

public class UserVO {

private Map<String,String> user = new HashMap<>();

//get、set

}

修改表单name为: 集合名[‘属性名’]



修改方法

@PostMapping(“/login”)

public void login(UserVO userVO){

String username = userVO.getUser().get(“username”);

String password = userVO.getUser().get(“password”);

}

4.2.6 通过List集合进行参数绑定

修改集合为List

public class UserVO {

private List user = new ArrayList<>();

//get、set

}

修改表单name为: 集合名[下标]



修改方法

@PostMapping(“/login”)

public void login(UserVO userVO){

String username = userVO.getUser().get(0);

String password = userVO.getUser().get(1);

}

4.3 参数绑定的中文乱码问题


SpringMVC提供了过滤器来设置编码

在web.xml中配置

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

encodingFilter

/*

4.4 自定义类型转换器


在进行参数绑定时,会自动完成完成基本类型(如byte、short、 int、long、float、double、boolean 、char )以及String类型的数据转换。

因为SpringMVC提供了大量内置的类型转换器Converter,来帮助进行参数在类型转换,如果我们需要完成某些特殊的数据格式的处理,就需要自定义类型转换器。

案例:表单输入id-name-age-subject格式的字符串,绑定到Student类型的参数。

实体类

public class Student {

private Long id;

private String name;

private Integer age;

private String subject;

…get/set

}

自定义转换器

/**

  • 学生类型转换器,将id-name-age-subject格式字符串转换为Student对象

*/

public class StudentConverter implements Converter<String, Student> {

@Override

public Student convert(String s) {

//按-分割字符串

String[] strings = s.split(“\-”);

if(strings.length != 4){

throw new IllegalArgumentException(“字符串不符合学生信息格式要求”);

}

//返回Student对象

Student student = new Student();

student.setId(Long.valueOf(strings[0]));

student.setName(strings[1]);

student.setAge(Integer.valueOf(strings[2]));

student.setSubject(strings[3]);

return student;

}

}

注册转换器,修改springmvc的annotation-driver配置

<mvc:annotation-driven conversion-service=“conversionService”/>

控制器

@PostMapping(“/saveStudent”)

public void saveStudent(Student student){

System.out.println(student.getId());

System.out.println(student.getName());

System.out.println(student.getAge());

System.out.println(student.getSubject());

}

页面


5、页面数据绑定

======================================================================

5.1 EL实现后台数据绑定


在JSP页面中可以通过EL表达式来绑定后台的数据,后台数据可以保存到:

  1. 将数据保存到HttpServletRequest、HttpSession、ServletContext中

  2. 在参数中定义Model参数保存数据

  3. 在参数中定义Map参数保存数据

5.2 页面跳转


页面跳转的两种方式:

  1. 请求转发

forward:url

  1. 重定向

redirect:url

5.3 登录案例


首页

<%@ page contentType=“text/html;charset=UTF-8” language=“java” isELIgnored=“false” %>

首页

Hello ${user.username}你好

模拟登录,使用User来获得参数,保存User对象到HttpSession,重定向到首页后,可以从首页读取用户名;

保存错误信息到Model对象中,请求转发到登录页面后,可以读取Model中的数据

@PostMapping(“/login”)

public String login(User user,HttpSession session,Model model){

if(“admin”.equals(user.getUsername()) && “123”.equals(user.getPassword())){

//保存用户数据到Session中

session.setAttribute(“user”,user);

//重定向到首页

return “redirect:/index”;

}

//保存错误提示数据到Model

model.addAttribute(“msg”,“账号或密码错误”);

//请求转发到当前页

return “forward:/login”;

}

5.4 处理ServletAPI


SpringMVC还支持以原生ServletAPI作为形参,包括:

  • HttpServletRequest

  • HttpServletResponse

  • HttpSession

  • java.security.Principal

  • Local

  • InputStream

  • OutputStream

  • Reader

  • Writer

使用HttpServletRequest获得参数,将用户名保存到Session中

@PostMapping(“/login”)

public String login(HttpServletRequest req,HttpSession session){

String username = req.getParameter(“username”);

String password = req.getParameter(“password”);

session.setAttribute(“username”,username);

return “redirect:/test”;

}

@SessionAttribute

通过@SessionAttribute注解,可以读取Session中的用户名

@PostMapping(“/test”)

public String test(@SessionAttribute(“username”)String username){

System.out.println(username);

return “/index”;

}

@ModelAttribute

@ModelAttribute可以将模型数据注入到方法参数中

定义方法,在方法上加@ModelAttribute,将返回的User对象作为模型

@ModelAttribute(“user”)

public User getUser(){

User user = new User();

user.setUsername(“admin”);

user.setPassword(“123”);

return user;

}

在方法的参数上加入@ModelAttribute,注入模型对象

@RequestMapping(“/test2”)

public void test2(@ModelAttribute(“user”)User user){

System.out.println(user);

}

==============================================================

6、SpringMVC和Ajax交互

================================================================================

目前后台和前端进行通信主要的数据格式是:JSON

6.1 JSON简介


JSON是JavaScript的对象,代码简洁,可读性很高

格式有两种:

  1. 单个对象

{“name”:“张三”,“age”:“20”}

  1. 对象数组

[{“name”:“张三”,“age”:“20”},{“name”:“李四”,“age”:“20”}]

Java后台和前端Ajax通信时,经常需要接受JSON参数,也可能需要返回JSON给Ajax

6.2 相关的注解


SpringMVC和Ajax通信的相关注解

  • @RequestBody

定义在参数前面,用于接收JSON格式的对象

  • @ResponseBody

定义在方法前面,用于将数据返回给Ajax

6.3 案例


下面案例演示如何接收Ajax的JSON参数,以及如何返回JSON给Ajax

1) 导入依赖

SpringMVC需要JSON解析的相关依赖

com.fasterxml.jackson.core

jackson-databind

2.9.5

2)用户对象

public class User {

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;

}

@Override

public String toString() {

return “User{” +

“username='” + username + ‘’’ +

“, password='” + password + ‘’’ +

‘}’;

}

public User(String username, String password) {

this.username = username;

this.password = password;

}

public User() {

}

}

3) 控制器,在参数中添加了@RequestBody,方法前添加@ResponseBody

将会接收一个User对象参数,然后返回一个User集合给Ajax

/**

  • 自定义控制器

*/

@Controller

public class MyController {

@ResponseBody

@RequestMapping(“/ajax”)

《MySql面试专题》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySql性能优化的21个最佳实践》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySQL高级知识笔记》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

关注我,点赞本文给更多有需要的人

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

MySql性能优化的21个最佳实践》

[外链图片转存中…(img-1sRgu7l9-1715584331920)]

[外链图片转存中…(img-7KmPuVLQ-1715584331921)]

[外链图片转存中…(img-djKHHqLk-1715584331921)]

[外链图片转存中…(img-3xb9Q7t0-1715584331921)]

《MySQL高级知识笔记》

[外链图片转存中…(img-Pr5SispX-1715584331922)]

[外链图片转存中…(img-3EgLLpXt-1715584331922)]

[外链图片转存中…(img-noxemIJn-1715584331922)]

[外链图片转存中…(img-oR7Yyh8I-1715584331923)]

[外链图片转存中…(img-FBn5xBvT-1715584331923)]

[外链图片转存中…(img-NXSVCnUa-1715584331923)]

[外链图片转存中…(img-zV3cDNDp-1715584331924)]

[外链图片转存中…(img-zccLirYl-1715584331924)]

[外链图片转存中…(img-5UFHklFn-1715584331924)]

[外链图片转存中…(img-YUZLtdUo-1715584331924)]

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

[外链图片转存中…(img-XmBoxvnF-1715584331925)]

关注我,点赞本文给更多有需要的人

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 27
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值