Не могу найти решение следующей ситуации. У меня есть контроллер, модель и сервис между ними для проверки данных из запроса 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"}]