Web框架 — SpringMVC学习笔记2

Posted Putarmor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web框架 — SpringMVC学习笔记2相关的知识,希望对你有一定的参考价值。

@GetMapping注解

用get请求访问:

@GetMapping("/index4")  //只能通过get方式访问
    public String getIndex4()
        logger.error("我是index.html");
        return "/index.html";
    

当我们在Postman中用post请求url时,就会出现405,无法访问到url。


@PostMaapping注解

@PostMapping("/index5")  
    public String getIndex5()
        logger.error("我是index.html");
        return "/index.html";
    

启动Spring后,浏览无法进行post请求


@Responsebody方法注解

方法返回字符串而不返回视图

1.返回自定义Java对象

@RequestMapping("/index6")
    @ResponseBody  //返回自定义类型而非视图
    public  String getIndex6()
        return "/index.html";
    

请求后的结果:

2.返回Json字符串对象

原始方法:

@RequestMapping("/index7")
    @ResponseBody
    public String getIndex7() throws JsonProcessingException 
        User user = new User();
        user.setUsername("trq");
        user.setPassword("hello");
        //将对象转换成Json字符串
        String result = objectMapper.writeValueAsString(user);
        log.error(result);
        return result;
    

请求后的结果:

2.利用Spring技术:

@RequestMapping("/index8")
    @ResponseBody
    //利用Spring技术直接转换成了Json对象,非常方便
    public User getIndex8()
        User user = new User();
        user.setUsername("trq");
        user.setPassword("hello");
        return user;
    

@Responsebody类注解

返回后端接口信息,而非视图


参数注解:
@PathVariable

一般的URL服务路径都时固定的,SpringMVC提供了restful风格可以变化的URL,示例:

@RestController
@RequestMapping("/method")
public class MethodController 

    @GetMapping("/people/pid/animal/aid")
    public String method(@PathVariable String pid,
                         @PathVariable("aid") String animalId)
        return "用户id: "+pid+",动物id: "+animalId;
    

上述代码中,people是固定形式,pid则是动态变化的,看作一个变量,animal和aid同理,当我们想在方法中自定义参数时,可以在@PathVariable注解后面添加原来的“aid”;在浏览器中访问动态url

动态url优点:url语义很明确,seo(搜索引擎)获取的权限更高一些


@RequestMapping("/getname")
    public String method2(String name)
        return "姓名:"+name;
    

url中手动传参访问:


@RequestBody注解

@RequestMapping("/login")
    public String method3(@RequestBody String name, @RequestBody String password)
        return "姓名:"+name+", 密码:"+password;
    

当@RequestBody(required = false)时表明该参数可有可无;当required = true时表明必须传入该参数;默认情况下没有设置required时必须传参

这种方式参数需要从request的body中获取,当我们不传参数时访问url,结果显示request的body不存在,因而出现问题

当我们补全参数时时,依然还不能访问,结果依然显示request的body不存在

实际上,这时候我们通过Postman工具在body中设置两个参数,然后通过post方法模拟url请求才会出现结果;此外利用get方法时,也能得到结果,这是因为我们用在request的body中设置参数,利用get方法模拟了post方法。


下面这段代码效果与方法注解@GetMapping是一样的!

@RequestMapping(value = "/index9", method = RequestMethod.GET)
    public String getIndex9()
        return "/index.html";
    

@RequestParam与@RequestBody区别:

与RequestBody不同的是,使用RequestParam后,可以直接在浏览器中传入参数访问,而RequestBody只能使用Postman在request的body中传参访问。此外,RequestParam也可以指定required,为true时必须传参,为false传不传都行。

@RequestMapping("/reg")
    public String method4(@RequestParam String name, @RequestParam String password)
        return "姓名:"+name+", 密码:"+password;
    


在方法中可以直接传入一个对象,返回对象的每个属性,这样就避免传入了多个形参。

@RequestMapping("/reg3")
    public String method6(User user)
        return "username:"+user.getUsername()+
                ", password:"+user.getPassword()+
                ", img:"+user.getImg();
    


当我们在浏览中不传参时,也是能访问的,返回的属性值都为null

当后端为@RequestBody加自定义对象形式:

传参时必须在request的body中传,此外需要注意的是,不能采用form表单提交的方式了,这时候需要采用Json字符串对象格式。


举例:


小小的练习

使用PostMan和自定义的User对象完成登录功能,当用户名和密码都等于root时登录成功,否则登录失败,登录成功之后将登录的用户信息存储到Session中。

前端核心部分:

利用jQuery框架,getJson()是专门为ajax获取json数据而设置的,支持跨域调用,基本用法:getJson(url,[data],[callback])

  • url:String类型,表示发送的请求地址,也可以称为后端路由地址
  • data:可选参数,为前端待发送的key/value参数,表示前端向后端发送的参数,同get/post类型的data
  • callback:回调函数

后端代码:

浏览器中访问login.html,并输入正确的用户名和密码,看一下后端相应给前端的情况:

前端请求的url:http://localhost:8080/user/login3username=trq&password=0627

后端响应结果:

查看Cookies:里面保存了后端设置的sessionid

以上是关于Web框架 — SpringMVC学习笔记2的主要内容,如果未能解决你的问题,请参考以下文章

Web框架 — SpringMVC学习笔记3(加强理解)

Web框架 — SpringMVC学习笔记3(加强理解)

Web框架 — SpringMVC学习笔记1

Web框架 — SpringMVC学习笔记1

学习笔记——SpringMVC简介;SpringMVC处理请求原理简图;SpringMVC搭建框架

Java培训学习笔记分享:SpringMVC框架