springboot项目前端传递了某个参数,但是后端获取值为null

发布时间 2024-01-08 21:11:47作者: 做个读书人

 从浏览器的payload中可以看出前端请求的方式是text还是form提交

1、前端如果提交方式为text,将参数绑定到对象的时候需要用到@Request注解,才能进行绑定,否则获取的值一直为null;

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping("/")
    public User createUser(@RequestBody User user) {
        // 处理创建用户的逻辑
        return user;
    }

}

2、前端传递的方式为form表单的时候,如下的例子中

客户端向/register发送POST请求并且请求体是application/x-www-form-urlencoded类型时,Spring Boot会自动将请求参数绑定到User对象的相应属性上。

但必须确保你的User类有公开的setter方法,以便Spring能够使用反射来设置属性值。如果你使用Lombok库,@Getter@Setter注解可以自动为你的属性生成这些方法。

此外,Spring Boot为你自动配置了消息转换器等组件,因此你不需要像在传统的Spring MVC设置中那样进行大量配置。这就是Spring Boot的"约定优于配置"的理念,它提供了合理的默认值,同时仍然允许你根据需要进行自定义配置

import org.springframework.web.bind.annotation.*;

// 导入lombok注解简化模型类的编写
import lombok.Getter;
import lombok.Setter;

// RestController注解告诉Spring Boot这是一个控制器组件,并且返回的字符串是响应体,而不是视图名
@RestController
public class UserController {

    // PostMapping注解表示这个方法将处理POST请求
    @PostMapping("/register")
    public String registerUser(User user) {
        // user对象将包含表单提交的数据
        // 这里可以执行如保存用户等操作
        return "User " + user.getUsername() + " registered successfully!";
    }
}

// 使用lombok简化getter和setter的编写
@Getter
@Setter
class User {
    private String username;
    private String password;
    // 可以添加其他属性以及它们的getter和setter
}