Web框架 — SpringMVC学习笔记2

26 篇文章 0 订阅

@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
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值