springmvc之注解

SpringMVC注解解释

1、@RequestParam

这个注解只能够接收来自请求地址后缀中的值,而不能够接收到请求体中的参数的值:

    @PostMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(value = "id") Integer id){
        System.out.println(id);
        return "success";
    }

在利用ApiPost来进行测试的时候,可以看到:

Post:localhost:8080/hello/testRequestParam
{
    "id":1
}

返回回来的结果是:

Request","trace":"org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter 'id' is not present\r\n\tat 

这里是说需要的Integer类型的参数是没有展现出来。但是实际上,我是将这个参数放在了请求体中。

由此可以总结出来,@RequestParam这个注解注释的值只能够在localhost:8080/hello/testRequestParam?id=1,这个后缀后面来进行添加。而不管是post还是get方式的请求。将上面的@PostMapping修改成为@GetMapping即可。

再看下里面的参数:

public @interface RequestParam {
    @AliasFor("name")
    String value() default "";

    @AliasFor("value")
    String name() default "";
	
    // 这里默认是必须传的,这里可以手动设置
    boolean required() default true;
	
    // 如果不传值,那么将默认的使用这个值
    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

2、@RequestBody

用于方法的参数上,表示把请求体的数据,赋值给方法参数。

从这里可以看到只有是Post方式的请求才会有请求体,所以这里必须是post请求方式才可以。

注意:这里使用这个注解是可以接收所有来自请求体中所有的内容的。通常这里传输的是json格式的数据,但是我们先通过下面的方式来测试一下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>首页</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/hello/testRequestBody" method="post">
    <input type="text" name="username"><br>
    <input type="password" name="password"><br>
    <input type="submit" value="post提交">
</form>
</body>
</html>

然后在controller中编写一个测试用例:

    @PostMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String str){
        System.out.println(str);
        return "success";
    }

查看控制台输出:

username=111&password=222

但是通常我们都不会拿到这个数据来进行操作,我们希望能够将这串数据来进行转换。

也就是说希望能够将这串数据转换成json数据格式。

那么也是可以的,在当前的spring boot中已经集成了将json转换成对象的工具类,所以这里就不再需要我们来进行转换了。

这里在ApiPost中发送post请求,并传递json格式数据

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Builder(toBuilder = true)
public class LoginUser {
    private String username;
    private String password;
}

测试代码:

    @PostMapping("/testRequestBodyTwo")
    public String testRequestBodyTwo(@RequestBody LoginUser loginUser){
        System.out.println(loginUser);
        return "success";
    }

查看控制台:

LoginUser(username=111, password=222)

查看下源代码:

public @interface RequestBody {
    boolean required() default true;
}

这里没什么好说的,默认为true,也就是需要请求体。

其他的之后再来慢慢进行补充。

posted @ 2021-10-28 23:47  雩娄的木子  阅读(151)  评论(0编辑  收藏  举报