Pyyntöjen ja vastausten validointi
Toteuttakaa saapuvien pyyntöjen tietojen validointi ja muotoilkaa yhdenmukaiset virhevastausviestit.
Pyyntöjen ja vastausten validointi on ilmainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti CoddyKitissä. Tämä on oppitunti 1/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 3 oppituntia.
Miksi pyynnöt validoidaan?
REST APIen yhteydessä asiakkaat lähettävät palvelimelle tietoja. Näiden tietojen on usein täytettävä tietyt säännöt: esimerkiksi kenttä ei saa olla tyhjä tai luvun on oltava tietyllä välillä.
- Tietojen eheys: Varmistaa, että tietokantaan tallennetaan vain kelvollisia tietoja.
- Turvallisuus: Estää haitallisia tai virheellisesti muodostettuja tietoja aiheuttamasta ongelmia.
- Käyttökokemus: Antaa asiakkaille selkeän ja välittömän palautteen virheellisistä syötteistä.
Validointi on olennaista luotettavien ja toimintavarmojen APIen kannalta.
Springin validointityökalut
Spring Boot helpottaa tietojen validointia integroimalla Jakarta Bean Validation API:n (JSR 380). Käytätte controller-metodeissa ensisijaisesti @Valid-annotaatiota.
Yleisiä validointiannotaatioita ovat:
@NotNull: Kenttä ei saa olla null.@NotBlank: Merkkijono ei saa olla null, ja sen on sisällettävä vähintään yksi muu kuin whitespace-merkki.@Size(min=X, max=Y): Merkkijonon tai kokoelman koon on oltava annetulla välillä.@Min(X),@Max(Y): Numeerisen arvon on oltava annetulla välillä.@Email: Merkkijonon on oltava kelvollisessa sähköpostiosoitteen muodossa.
Data Transfer Objectit (DTO:t)
Saapuvien pyyntörunkojen käsittelyssä on suositeltavaa käyttää Data Transfer Objectia (DTO). DTO on yksinkertainen Java-luokka, joka vastaa asiakkaalta odotettavien tietojen rakennetta.
Validointiannotaatiot lisätään suoraan DTO:n kenttiin. Näin controller pysyy selkeänä ja validointilogiikka erillään liiketoimintalogiikasta.
Perusvalidoinnin toteuttaminen
Luodaan ProductRequest-DTO, jossa on joitakin validointisääntöjä, ja käytetään sitä Spring Boot -controllerissa. @Valid-annotaatio käynnistää validoinnin.
Kokeilkaa lähettää pyyntö, jossa nimi on tyhjä tai hinta pienempi kuin 1.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Min;
// DTO for product creation request
class ProductRequest {
@NotBlank
private String name;
@Min(1)
private double price;
// Getters and Setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
}
@RestController
@RequestMapping("/api/products")
class ProductController {
@PostMapping
public String createProduct(@Valid @RequestBody ProductRequest productRequest) {
// If validation passes, process the product request
return "Product '" + productRequest.getName() +
"' with price " + productRequest.getPrice() +
" created successfully!";
}
}
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}Virheilmoitusten mukauttaminen
Validoinnin oletusvirheilmoitukset voivat joskus olla yleisluontoisia. Voitte määrittää kullekin annotaatiolle omat mukautetut viestit, jotka ovat käyttäjäystävällisempiä ja sovelluksen tarpeisiin sopivia.
Lisätkää validointiannotaatioon message-attribuutti esimerkiksi näin: @NotBlank(message="Product name is required").
Esimerkki mukautetusta viestistä
Päivitetään ProductRequest-DTO niin, että se sisältää mukautetut virheilmoitukset. Näin asiakkaat ymmärtävät tarkasti, mikä heidän syötteessään meni vikaan.
Suorittakaa tämä ja kokeilkaa aiempia virheellisiä syötteitä uudelleen. Teidän pitäisi nähdä mukautetut viestinne.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Min;
// DTO for product creation request with custom messages
class ProductRequest {
@NotBlank(message = "Product name cannot be empty")
private String name;
@Min(value = 1, message = "Product price must be at least 1")
private double price;
// Getters and Setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
}
@RestController
@RequestMapping("/api/products")
class ProductController {
@PostMapping
public String createProduct(@Valid @RequestBody ProductRequest productRequest) {
return "Product '" + productRequest.getName() +
"' with price " + productRequest.getPrice() +
" created successfully!";
}
}
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}Validointipoikkeusten käsittely
Kun validointi epäonnistuu, Spring heittää automaattisesti MethodArgumentNotValidException-poikkeuksen. Oletusarvoisesti Spring käsittelee tämän palauttamalla HTTP-tilan 400 Bad Request ja yksinkertaisen virherungon.
Yhtenäistä APIa varten virhevastaus kannattaa kuitenkin mukauttaa. Tämä tarkoittaa poikkeuksen käsittelemistä ja vastauksen muotoilemista rakenteisesti, usein tiettyjen virhekoodien tai lisätietojen avulla.
Yleinen virheenkäsittelijä
Voitte tarjota koko APIlle yhtenäisen virhevastauksen käyttämällä yleistä virheenkäsittelijää. Se on yleensä luokka, joka merkitään @ControllerAdvice-annotaatiolla.
Tämän luokan sisällä määritätte @ExceptionHandler-annotaatiolla merkittyjä metodeja, jotka käsittelevät tiettyjä poikkeustyyppejä, kuten MethodArgumentNotValidException-poikkeusta, ja palauttavat mukautetun ResponseEntity-vastauksen.
Virheenkäsittely käytännössä
Näin luodaan yleinen virheenkäsittelijä, joka käsittelee validointipoikkeukset ja palauttaa rakenteisen JSON-virhevastauksen. Tämä parantaa API:n yhtenäisyyttä ja helpottaa virheenkäsittelyä asiakkaiden näkökulmasta.
Suorittakaa tämä koodi ja kokeilkaa lähettää virheellinen tuotepyyntö. Tarkastelkaa rakenteista virhevastausta.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Min;
import org.springframework.validation.FieldError;
import java.util.HashMap;
import java.util.Map;
// DTO for product creation request
class ProductRequest {
@NotBlank(message = "Product name cannot be empty")
private String name;
@Min(value = 1, message = "Product price must be at least 1")
private double price;
// Getters and Setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
}
// Custom Error Response DTO
class ErrorResponse {
private int status;
private String message;
private Map<String, String> errors;
public ErrorResponse(int status, String message, Map<String, String> errors) {
this.status = status;
this.message = message;
this.errors = errors;
}
// Getters
public int getStatus() { return status; }
public String getMessage() { return message; }
public Map<String, String> getErrors() { return errors; }
}
@RestController
@RequestMapping("/api/products")
class ProductController {
@PostMapping
public String createProduct(@Valid @RequestBody ProductRequest productRequest) {
return "Product '" + productRequest.getName() +
"' with price " + productRequest.getPrice() +
" created successfully!";
}
}
@ControllerAdvice
class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseEntity<ErrorResponse> handleValidationExceptions(
MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
ErrorResponse errorResponse = new ErrorResponse(
HttpStatus.BAD_REQUEST.value(),
"Validation failed",
errors
);
return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
}
}
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}Validoinnin pikakertaus
Tarkastellaan DTO:n kenttää: @Size(min = 5, max = 10, message = "Length must be between 5 and 10") String code;
Mikä code-kentän syöte aiheuttaisi validointivirheen?
Kertaus: validointi ja virheet
Tässä oppitunnissa opitte toteuttamaan vankat pyyntöjen validoinnit Spring Bootilla ja tarjoamaan yhtenäiset virhevastaukset.
- Käytimme DTO:iden kanssa
@Valid-annotaatiota ja tavallisia bean validation -annotaatioita, kuten@NotBlankja@Min. - Näitte, miten validoinnin virheilmoituksia voi mukauttaa.
- Toteutimme
@ControllerAdvice-annotaatiolla merkityn yleisen virheenkäsittelijän, joka käsitteleeMethodArgumentNotValidException-poikkeuksen ja palauttaa rakenteisia, käyttäjäystävällisiä virhevastauksia.
Hienoa! Yhtenäinen validointi ja virheenkäsittely ovat ammattimaisen APIn kannalta olennaisia.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 24
- Oppitunnit
- 93
Usein kysytyt kysymykset
Onko oppitunti ”Pyyntöjen ja vastausten validointi” ilmainen?
Kyllä – oppitunnin ”Pyyntöjen ja vastausten validointi” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssin, päivitä CoddyKit PROhon. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”Pyyntöjen ja vastausten validointi”?
Toteuttakaa saapuvien pyyntöjen tietojen validointi ja muotoilkaa yhdenmukaiset virhevastausviestit. Harjoittelet Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/3.
Kuinka kauan ”Pyyntöjen ja vastausten validointi”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunnilla?
Kyllä. Jokainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Pyyntöjen ja vastausten validointi
- Sivutus ja lajittelu
- HATEOAS-periaatteet RESTille