Требовать, чтобы свойство имело значение в модели, не разрешать нуль - PullRequest
0 голосов
/ 31 октября 2018

Не могу найти решение следующей ситуации. У меня есть контроллер, модель и сервис между ними для проверки данных из запроса POST.

Хотя ошибки возвращаются для свойств name и age, когда ограничения не соблюдаются, для свойства hungry не указывается ни одно свойство, которое всегда должно иметь значение. Я установил его на @NotNull и @NotEmpty, но оба не дают желаемого результата, когда в запросе POST не указано значение для свойства hungry. Я неправильно подхожу к этому?

Контроллер

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
public class IndexController {

    private UserService userService;

    public IndexController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping
    ResponseEntity create(@Valid User user, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return ResponseEntity.badRequest().body(bindingResult.getAllErrors());
        }
        return userService.create(user);
    }
}

Модель

package com.example.demo.model;

import com.google.gson.annotations.Expose;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.*;

@Entity
public class User {

    @Id
    @GeneratedValue
    private int id;

    @Size(min = 2, max = 15)
    @Expose
    private String name;

    @Min(18)
    @Max(100)
    @Expose
    private int age;

    @Expose
    private boolean hungry;


    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isHungry() {
        return hungry;
    }

    public void setHungry(boolean hungry) {
        this.hungry = hungry;
    }
}

Услуги

package com.example.demo.service;

import com.example.demo.model.User;
import com.example.demo.repo.UserRepository;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionSystemException;

import javax.persistence.RollbackException;
import javax.validation.ConstraintViolationException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.concurrent.ExecutionException;

@Service
public class UserService {

    private UserRepository userRepository;


    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;

        //User newU = new User("Isaak", 30);
        //this.userRepository.save(newU);
    }

    public ResponseEntity create(User user) {
        userRepository.save(user);
        return ResponseEntity.ok().build();
    }
}

Мой запрос:

POST
http://localhost:8080/
name=1
age=250

Ответ:

[{"codes":["Size.user.name","Size.name","Size.java.lang.String","Size"],"arguments":[{"codes":["user.name","name"],"arguments":null,"defaultMessage":"name","code":"name"},15,2],"defaultMessage":"moet tussen 2 en 15 liggen","objectName":"user","field":"name","rejectedValue":"j","bindingFailure":false,"code":"Size"},{"codes":["Max.user.age","Max.age","Max.int","Max"],"arguments":[{"codes":["user.age","age"],"arguments":null,"defaultMessage":"age","code":"age"},100],"defaultMessage":"moet kleiner of gelijk aan 100 zijn","objectName":"user","field":"age","rejectedValue":250,"bindingFailure":false,"code":"Max"}]

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы не можете присвоить Java-примитивам значение null, изменить int на Integer и boolean на Boolean.

@Entity
public class User {

    @Id
    @GeneratedValue
    private int id;

    @NotNull
    @Size(min = 2, max = 15)
    private String name;

    @NotNull
    private Integer age;

    @NotNull
    private Boolean hungry;
}
0 голосов
/ 31 октября 2018

Примитивные типы не могут быть null, но вы можете использовать Boolean с пометкой @NotNull.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...