【问题标题】:Postman Post call to Spring Controller is always nullPostman Post 对 Spring Controller 的调用始终为空
【发布时间】:2019-03-13 23:52:39
【问题描述】:

我在 Spring Boot 中创建了一个包含用户数据库的应用程序。现在我正在尝试使用邮递员在控制器中进行休息呼叫,以发送有关用户的信息并将其保存在数据库中。第一次restcall在数据库中保存了一个空对象(所有信息都是空的)而不是邮递员调用中的数据,所以我认为错误是在邮递员和控制器之间的调用中。

实体:

@Entity
@Table(name = "user", schema = "localhost", catalog = "")
public class UserEntity {
    private int userId;
    private int unitId;
    private String roleName;
    private String firstName;
    private String lastName;

控制器:

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping(value = "/addNewUser",
            method = RequestMethod.POST,
            produces = MediaType.APPLICATION_JSON_VALUE,
            consumes = MediaType.APPLICATION_JSON_VALUE)
    public String saveNewUser(UserEntity user) {
        try {
            userService.saveNewUser(user);
            return "User has been saved";
        } catch (NullPointerException npe) {
            return "Nullpointer: User has not been saved";
        } catch (Exception e) {
            return e.getMessage();
        }
    }
}

邮递员电话:

我发送邮递员电话时的调试器:

user = {UserEntity@8954} 
userId = 0
unitId = 0
roleName = null
firstName = null
lastName = null

这个项目的目标不是“让它工作”,而是让它以一种干净、适当的方式工作。这就是为什么我想使用一个对象来发送信息而不是把它放在 url 参数中。

如果有人可以通过指出问题来帮助我,我将非常感激。任何关于代码改进的提示也非常欢迎。

【问题讨论】:

    标签: java rest spring-mvc postman


    【解决方案1】:

    你把它作为一个错误的数组传递,把它当作一个对象传递。

    您也在 pojo 中将 userId,unitId 定义为 int 但在正文中作为字符串发送,因此将其更改为 "userId":1,"unitId":1 。像下面这样传递。

    {
      "userId":1,
      "unitId":1,
      "roleName":"AAA",
      "firstName":"BBB",
      "lastName":"CCC"
    }
    

    并通过添加@RequestBody 将public String saveNewUser(UserEntity user) 更改为public String saveNewUser(@RequestBody UserEntity user)

    更新

    除此之外,将您的请求内容类型更改为 json

    【讨论】:

    • 感谢您的回复!我已通过删除引号将 userId 和 unitId 更改为整数,并将类型设置为邮递员中的 json,但它们在调试器中仍为空值。你知道restcall还有什么问题吗?
    • 我怀疑你只是在使用你之前的请求..use { "userId":1, "unitId":1, "roleName":"AAA", "firstName":"BBB", " lastName":"CCC" } 而不是在我的答案中..您不必使用“UserEntity”键。
    • 我用了你写的json还是不行,但是我发现了最后一个问题:控制器方法参数需要@RequestBody才能存储数据。
    • oops..missed that..thanks...public String saveNewUser(@RequestBody UserEntity user)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2019-03-06
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多