Как проверить, что указанные c элементы в разных коллекциях существуют методом POST в SpringBoot rest api - PullRequest
0 голосов
/ 06 мая 2020

В моей программе у меня есть три класса, и для каждого из них у меня есть три коллекции в одной базе данных. Класс игрока:

 package thesisMongoProject;

    import javax.validation.constraints.NotBlank;    
    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;

    @Document(collection = "player")
    public class Player {
        @Id
        @NotBlank
        private String nickname;
        @NotBlank
        private String firstname;
        @NotBlank
        private String lastname;
        @NotBlank
        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 + "]";
        }


    }

Класс игры:

        package thesisMongoProject;

    import javax.validation.constraints.NotBlank;    
    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;


    @Document(collection = "game")
    public class Games {
        @Id
        @NotBlank
        private String code;
        @NotBlank
        private String title;
        @NotBlank
        private String software_house;
        @NotBlank
        private String version;
        @NotBlank
        private String release_year;
        public Games(@NotBlank String code, @NotBlank String title, @NotBlank String software_house,
                @NotBlank String version, @NotBlank @NotBlank @NotBlank String release_year) {
            super();
            this.code = code;
            this.title = title;
            this.software_house = software_house;
            this.version = version;
            this.release_year = release_year;
        }
        public String getCode() {
            return code;
        }
        public void setCode(String code) {
            this.code = code;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public String getSoftware_house() {
            return software_house;
        }
        public void setSoftware_house(String software_house) {
            this.software_house = software_house;
        }
        public String getVersion() {
            return version;
        }
        public void setVersion(String version) {
            this.version = version;
        }
        public @NotBlank String getRelease_year() {
            return release_year;
        }
        public void setRelease_year(@NotBlank String release_year) {
            this.release_year = release_year;
        }
        @Override
        public String toString() {
            return "Games [code=" + code + ", title=" + title + ", software_house=" + software_house + ", version="
                    + version + ", release_year=" + release_year + "]";
        }


    }

И класс Score:

 package thesisMongoProject;

import java.util.Date;
import java.util.List;

import javax.validation.constraints.NotBlank;

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

import com.fasterxml.jackson.annotation.JsonView;

@Document(collection = "score")
public class Score {
    @Id
    @NotBlank
    @JsonView(Views.class)
    private String score;
    @NotBlank
    @JsonView(Views.class)
    private String player;
    @NotBlank
    @JsonView(Views.class)
    private String code;
    @JsonView(Views.class)
    private Date date;
    private List<History> history = null;



    public Score(@NotBlank String score, String player, String code, List<History> history, Date date) {
        super();
        this.score = score;
        this.player = player;
        this.code = code;
        this.history = history;
        this.date = date;
    }
    public String getScore() {
        return score;
    }
    public void setScore(String score) {
        this.score = score;
    }
    public String getPlayer() {
        return player;
    }
    public void setPlayer(String player) {
        this.player = player;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public List<History> getHistory() {
        return history;
    }
    public void setHistory(List<History> history) {
        this.history = history;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    @Override
    public String toString() {
        return "Score [score=" + score + ", player=" + player + ", code=" + code + ", history=" + history + ", date="
                + date + "]";
    }

}

Класс просмотра:

 package thesisMongoProject;

public class Views {
    public static class Creat{}

}

Метод POST:

//Create Score
        @PostMapping
        public ResponseEntity<?> createScore(@RequestBody @JsonView(Views.class) @Valid  Score score) {
            //check player exist
            Player p = prepo.findByNickname(score.getPlayer());
            //check game's cod exist
            Games g = grepo.findByCode(score.getCode());
            //check score exist
            Score s = srepo.findByScore(score.getScore());
            if(s != null)
            {
                return ResponseEntity.status(409).body("Conflict!!");
            }
            else if((p != null) || (g != null)) {
                srepo.save(score);
                return ResponseEntity.status(201).body("Created!"); 
            }
            else {
                return ResponseEntity.status(400).body("Bad Request!");
            }

        }

Фактически, в методе POST, тело POST запросы содержат только игрока, игру, счет, дату, а не историю, и для этой проблемы я использовал аннотацию @JSONView (Views.class). Когда выдается запрос POST, служба «счет» должна проверять, существуют ли указанные «игрок» и «игра» (т. Е. Существует ли и игрок с этим ником, и игра с этим кодом); в противном случае 400 Bad Request. Сначала я использовал @DBRef для проигрывателя и кода, например, @DBRef String player @DBRef String code внутри класса Score, и я использовал Publi c Score findByPlayerAndCode (String player, String code); внутри моего ScoreRepository для проверки игрока и игры; код существует или нет, но у меня была ошибка. Затем я использовал экземпляры PlayerRepository и GameRepository для этого, но для меня ничего не изменилось, и моя программа по-прежнему не работает. не могли бы вы помочь мне, что я должен сделать, пожалуйста

1 Ответ

0 голосов
/ 06 мая 2020

В Оценке Класса вы использовали аннотацию @NotBlank с датой типа. Что неверно, @NotBlank можно использовать только со строкой.

Используйте @NotNull с типом даты.

    @NotNull
    @JsonView(Views.class)
    private Date date;

Ссылка - https://www.baeldung.com/java-bean-validation-not-null-empty-blank

...