Я прохожу онлайн-курс, и инструктор поместил две заметки для проверки полей в моем объекте категории. Аннотации @Notnull в атрибуте name и @Valid в контроллере, в его видео HTTP-ответ об ошибке изменяется с 500 на 400, поскольку он проверяет атрибуты. Прежде чем вернуть проверку, он вернул 500. Мой продолжает возвращать 500. Другими словами, аннотации @Valid и @Notnull, похоже, не имеют никакого эффекта, кто-нибудь знает почему? Вот мой код:
MyPom:
<?xml version="1.0" encoding="UTF-8"?>
4.0.0 org.springframework.boot spring-boot-starter-parent 2.3.1.RELEASE jar -> com.algaworks. algamoney-api algamoney-api 1.0.0-SNAPSHOT algamoney-api Демо-проект для Spring Boot
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.4.4</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
MyController
package com.example.algamoney.api.resource;
import java.net.URI;
import java.util.List;
import java.util.Optional;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import org.springframework.web.util.UriBuilder;
import com.example.algamoney.api.model.Categoria;
import com.example.algamoney.api.repository.CategoriaRepository;
@RestController
@RequestMapping("/categoria")
public class CategoriaResource {
@Autowired
private CategoriaRepository categoriaRepository;
@GetMapping("/listar")
public List<Categoria> listar(){
return categoriaRepository.findAll();
}
@PostMapping("/criar")
public ResponseEntity<Categoria> criar(@Valid @RequestBody Categoria categoria, HttpServletResponse response) {
Categoria categoriaSalva = categoriaRepository.save(categoria);
URI uri = ServletUriComponentsBuilder.fromCurrentRequestUri().path("/{codigo}")
.buildAndExpand(categoria.getCodigo()).toUri();
response.setHeader("Location", uri.toASCIIString());
return ResponseEntity.created(uri).body(categoriaSalva);
}
@GetMapping("/buscar/{codigo}")
public Optional<Categoria> buscarCategoriaPorCodigo(@PathVariable Long codigo) {
return categoriaRepository.findById(codigo);
}
}
и MyObject
package com.example.algamoney.api.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
@Entity
@Table(name = "categoria")
public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull(message = "Nome não pode ser nulo")
private String nome;
public Long getCodigo() {
return id;
}
public void setCodigo(Long codigo) {
this.id = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}