如何处理Post方法中的MissingServletRequestParameterException,以在SpringBoot中丢失某些信息

问题描述 投票:0回答:1

在我的程序中,我有一类具有4个参数的播放器。在Post方法中,如果我缺少参数,请尝试抛出handleMissingParameter。但是在PostMan中,当我像这样键入json时:{“昵称”:“某物”,“ fisrtname”:“”,“ lastname”:“某物”,“电子邮件”:“”

}

没有错误,一切顺利,并向我展示了创造!信息。请问我在哪里弄错了,可以帮我!

///////////////////////////////////////////////// /这是我的张贴方法:

@PostMapping
public ResponseEntity<?> createPlayer(@RequestBody Player player) throws MissingServletRequestParameterException {
    Player findplayer = repo.findByNickname(player.getNickname());
    if(findplayer != null) {
        return ResponseEntity.status(409).body("Conflict!");
    }       
    repo.save(player);
    return ResponseEntity.status(201).body("Created!");


}

////////////////////////////////////

这里是我的handleException与我的Post方法在同一位置:

@ExceptionHandler(MissingServletRequestParameterException.class)
public void handleMissingParams(MissingServletRequestParameterException ex) {
    String name = ex.getParameterName();
    System.out.println(name + " parameter is missing");
    }

///////////////////////////////////////////////// ////

这是我的播放器类:

    package thesisMongoProject;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "player")
public class Player {
    @Id
    private String nickname;
    private String firstname;
    private String lastname;
    private String email;

    public Player(String nickname, String firstname, String lastname, String email) {
        super();
        this.nickname = nickname;
        this.firstname = firstname;
        this.lastname = lastname;
        this.email = email;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "Player [nickname=" + nickname + ", firstname=" + firstname + ", lastname=" + lastname + ", email="
                + email + "]";
    }


}

////////////////////////////

spring-boot spring-mvc exception postman spring-restcontroller
1个回答
0
投票

不要使用MissingServletRequestParameterException但要使用Bean Vaidation。

首先将@Valid注释添加到Player参数:

@PostMapping
public ResponseEntity<?> createPlayer(@RequestBody @Valid Player player) {
    Player findplayer = repo.findByNickname(player.getNickname());
    if(findplayer != null) {
        return ResponseEntity.status(409).body("Conflict!");
    }       
    repo.save(player);
    return ResponseEntity.status(201).body("Created!");
}

然后将验证添加到播放器:

@Document(collection = "player")
public class Player {
    @Id
    @NotBlank
    private String nickname;
    @NotBlank
    private String firstname;
    @NotBlank
    private String lastname;
    @NotBlank
    private String email;

查看本文:https://www.baeldung.com/spring-boot-bean-validation

© www.soinside.com 2019 - 2024. All rights reserved.