【问题标题】:How to handle MissingServletRequestParameterException in Post Method for missing some information in SpringBoot如何在 Post 方法中处理 MissingServletRequestParameterException 以丢失 Spring Boot 中的某些信息
【发布时间】:2020-04-24 19:05:26
【问题描述】:

在我的程序中,我有一类具有 4 个参数的玩家。 在 Post 方法中,如果我缺少参数,请尝试抛出 handleMissingParameter。 但是在 PostMan 中,当我像这样输入 json 时: { “昵称”:“某事”, "名字":"", “姓氏”:“某事”, “电子邮件”:“”

}

没有错误,一切顺利并显示我已创建!信息。 请你帮我看看我哪里出错了!

/////////////////////////////////////// // 这是我的发布方法:

@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】:

    不要使用 MissingServletRequestParameterException 而是使用 Bean Vaidation。

    首先在Player参数中添加@Valid注解:

    @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

    【讨论】:

    • 我很乐意为您提供帮助。请接受我的回答。谢谢
    • 当然,我忘了,对不起
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多