JavaRush /Java-Blog /Random-DE /Der Frühling ist nicht gruselig. Cookies und Header
Павел
Level 11

Der Frühling ist nicht gruselig. Cookies und Header

Veröffentlicht in der Gruppe Random-DE
INHALT DES ARTIKELZYKLUS Wiederholung ist die Mutter des Lernens! Erstellen wir daher basierend auf früheren Artikeln ein neues Web-Spring-Boot-Projekt: MobilePhonePayment Connect h2, Lombok. Erstellen Sie eine Entitätsebene: BalancePhoneEntity Integer id; Ganzzahlige NummerTelefon; String nameCustomer; Ganzzahliger Saldo; Erstellen Sie eine Schicht von Diensten mit folgenden Methoden: – Suche nach allen Datensätzen in der Datenbank – Suche nach einem Datensatz anhand der ID – Suche nach einem Datensatz anhand der Telefonnummer – Suche nach einem Datensatz anhand des Benutzernamens (sollte ein Blatt mit Datensätzen zurückgeben, die Namen möglicherweise gleich sein)
public List<BalanceEntity> findByNameCustomer(String nameCustomer){
    return balanceRepository.findAllByNameCustomer(nameCustomer);
}
- Hinzufügen eines Datensatzes zur Datenbank - Entfernen eines Datensatzes aus der Datenbank anhand der ID - Geschäftsmethode: Telefonguthaben aufladen - Die Methode muss eine Telefonnummer und einen Betrag (Integer-Typ) übernehmen und das Guthaben der entsprechenden Nummer um den angegebenen Betrag erhöhen Menge.
public void addingMoneyToBalance(Integer phoneNumber, Integer sum) {
    BalanceDto byPhoneNumber = findByPhoneNumber(phoneNumber);
    byPhoneNumber.setBalance(byPhoneNumber.getBalance() + sum);
    save(byPhoneNumber);//метод save() – добавление, реализован в сервисе
}
Vergessen Sie nicht, die Zuordnung von DTO zu Entity und zurück zu implementieren. Dto ähnelt Entity: BalancePhoneDto Integer id; Ganzzahlige NummerTelefon; String nameCustomer; Ganzzahliger Saldo; Erstellen Sie eine DTO-Schicht, erstellen Sie die InitiateUtils-Klasse und füllen Sie die Datenbank mit Daten: ID 1, NummerTelefon 555000, Kontostand 100, Kunde Ivan ID 2, NummerTelefon 444000, Kontostand 250, Kunde Marya ID 3, NummerTelefon 111000, Kontostand 60, Kunde Ivan Erstellen ein Rest-Controller, aber beeilen Sie sich nicht, ihn mit Methoden zu füllen. Wenn Sie dem vorherigen Artikel folgen, sollte die Methode zum Anzeigen aller Datensätze ungefähr so ​​​​aussehen (ich empfehle jetzt, in den Kommentaren zum Artikel nachzuschauen – insbesondere im Kommentar von Vasily Babin):
//поиск записи по id - старая Ausführung
@GetMapping(value = "/find-phone/{id}")
public ResponseEntity<BalanceDto> findPhone(@PathVariable Integer id) {
    BalanceDto balanceDto = balanceService.findById(id);
    return balanceDto != null
            ? new ResponseEntity<>(balanceDto, HttpStatus.OK)
            : new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
Es gibt eine andere Möglichkeit, ResponseEntity zu verwenden, ohne einen Konstruktor zu verwenden. Wir werden es weiterhin nutzen. ResponseEntity stellt zwei verschachtelte Builder-Schnittstellen bereit: HeadersBuilder und seine Unterschnittstelle BodyBuilder. Daher können wir über die statischen Methoden von ResponseEntity auf ihre Fähigkeiten zugreifen. Mehr können Sie in diesem Artikel lesen . Die restlichen Controller-Methoden können wie folgt implementiert werden: 1) Anzeigen eines Datensatzes nach ID
//поиск записи по id
@GetMapping(value = "/find-number-phoneById/{id}")
public ResponseEntity<?> findNumberPhoneById(@PathVariable Integer id) {
    BalanceDto balanceDto = balanceService.findById(id);
    return balanceDto != null
            ? ResponseEntity.ok(balanceDto)
            : ResponseEntity.ok().body(HttpStatus.NOT_FOUND);
}
Wir testen in Postman (wir haben im vorherigen Artikel darüber gesprochen, hier ist eine weitere kleine Anleitung zu diesem Programm ). Wir starten, wählen den GET-Anfragetyp aus, schreiben in die URL-Zeile: http://localhost:8080/find-number-phoneById/1 – wir haben den ID-Parameter in der Abfragezeile übergeben, in der Ausgabe erhalten wir einen Eintrag mit ID gleich 1. Vergessen Sie nach dem Hinzufügen des neuen Codes nicht, das Projekt neu zu starten😇 2) Datensätze nach Namen anzeigen
//поиск записи по имени пользователя
@GetMapping(value = "/find-number-phoneByName/{name}")
public ResponseEntity<?> findNumberPhone(@PathVariable String name) {
    List<BalanceDto> balanceDto = balanceService.findByNameCustomer(name);
    return balanceDto != null &&  !balanceDto.isEmpty()
            ? ResponseEntity.ok(balanceDto)
            : ResponseEntity.ok().body(HttpStatus.NOT_FOUND);
}
Erstellen wir eine neue Anfrage, wählen Sie den GET-Anfragetyp aus, schreiben Sie in die URL-Zeile: http://localhost:8080/ find-number-phoneByName/Ivan – wir haben den Namensparameter in der Abfragezeile übergeben und werden dies auch in der Ausgabe tun Rufen Sie eine Liste von Datensätzen ab, deren NameCustomer Ivan entspricht. Möglicherweise erhalten Sie in der Ausgabe etwas Ähnliches: %D1%8D%D1%82%D0%BE%20%D0%BD%D0%B5%20%D0%BE%D1%88%D0%B8%D0 % B1%D0%BA%D0%B0 Dies ist kein Fehler – dies sind Funktionen der Anforderungskodierung, lesen Sie darüber . Und hier steht geschrieben, wie man Postman so konfiguriert, dass das nicht passiert. 3) Ausgabe aller Datensätze:
//поиск всех записей
@GetMapping(value = "/findAll")
public ResponseEntity<?> findAll() {
    List<BalanceDto> balanceDto = balanceService.findAll();
    return balanceDto != null &&  !balanceDto.isEmpty()
            ? ResponseEntity.ok(balanceDto)
            : ResponseEntity.ok().body(HttpStatus.NOT_FOUND);
}
Wir erstellen eine neue Anfrage, wählen den GET-Anfragetyp aus, schreiben in die URL-Zeile: http://localhost:8080/findAll – wir übergeben hier keine Parameter. 4) Einen neuen Eintrag hinzufügen:
//добавление новой записи
@PostMapping(value = "/entry")
public ResponseEntity<?> entryNumber(@RequestBody BalanceDto dto){
    balanceService.save(dto);
    return ResponseEntity.ok().body(HttpStatus.CREATED);
}
Wir erstellen eine neue Anfrage, wählen den Anfragetyp POST und schreiben in die URL-Zeile: http://localhost:8080/entry. In dieser Anfrage müssen wir ein Objekt im JSON-Format übergeben. Gehen Sie im Anforderungsfenster zur Registerkarte „Body“, setzen Sie das Flag auf „raw“, klicken Sie auf den Pfeil neben „Text“ und wählen Sie „JSON“ aus. Kopieren Sie den folgenden JSON in das Fenster:
{
        "numberPhone": 767676,
        "nameCustomer": „Sascha“,
        "balance": 100
}
Wenn wir auf „Anfrage ausführen“ klicken, lautet der Antwortstatus „ERSTELLT“. Fragen Sie nun findAll erneut ab und stellen Sie sicher, dass ein neuer Eintrag angezeigt wird. 5) Löschen eines Eintrags anhand der ID
//удаление записи по id
@DeleteMapping(value = "/delete-phoneById/{id}")
public ResponseEntity<?> delete(@PathVariable Integer id) {
    balanceService.delete(id);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Wir erstellen eine neue Anfrage, wählen den Anfragetyp DELETE, schreiben in die URL-Zeile: http://localhost:8080/delete-phoneById/4 – wir haben den ID-Parameter in der Anfragezeile übergeben, wir erhalten den OK-Status in der Ausgabe . Stellen Sie nun eine weitere Anfrage an findAll und stellen Sie sicher, dass Sasha fehlt. 6) Ändern der Nummer nach ID
//изменение номера телефона по id
@PutMapping(value = "/change")
public ResponseEntity<?> changeNumberPhone(
//можно добавлять несколько параметров в Anfrage
        @RequestParam(value = "id") Integer id, //добавoder один параметр
        @RequestParam(value = "phoneNumber") Integer phoneNumber) //добавoder второй параметр
 {
    BalanceDto byId = balanceService.findById(id);
    byId.setNumberPhone(phoneNumber);
    balanceService.save(byId);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Wir erstellen eine neue Anfrage, wählen den PUT-Anfragetyp aus und schreiben in die URL-Zeile: http://localhost:8080/change. Diese Anfrage enthält mehrere Parameter, und wie Sie sehen, übergeben wir sie nicht wie zuvor in der Abfragezeile. Die Annotation @RequestParam wird für Parameter in einer Methode verwendet. Um Parameter über Postman zu übertragen, müssen Sie im Anforderungsfenster zur Registerkarte „Parameter“ gehen, in der Spalte „Schlüssel“ den Namen des Parameters (ID) und in der Spalte „Wert“ den Wert (1) angeben. Dasselbe machen wir mit dem zweiten Parameter, Key = phoneNumber, Value = 888000. Achten Sie auf die Abfragezeichenfolge, Postman hat sie geändert, um die Parameter korrekt zu übergeben. Die Ausgabe zeigt den Status OK an. Fragen Sie nun findAll erneut ab und stellen Sie sicher, dass sich die Telefonnummer für den ersten Eintrag geändert hat. 7) Laden Sie Ihr Telefonguthaben auf
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(
        //можно добавлять несколько параемров в Anfrage
        @RequestParam(value = "phoneNumber") Integer phoneNumber,//добавoder один параметр
        @RequestParam(value = "sum") Integer sum) //добавoder второй параметр
{
    balanceService.addingMoneyToBalance(phoneNumber, sum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Wir erstellen eine neue Anfrage, wählen den PUT-Anfragetyp aus und schreiben in die URL-Zeile: http://localhost:8080/add. Wir setzen den phoneNumber-Wert auf 888000, die Summe auf 130. Die Ausgabe zeigt den OK-Status an. Führen Sie nun die findAll-Anfrage erneut aus und stellen Sie sicher, dass sich der Saldo des ersten Datensatzes geändert hat. 8) PUT durch den Anfragetext – dies ist vorzuziehen, um die übertragenen Daten nicht zu öffnen
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(@RequestBody BalanceDto dto){
    balanceService.addingMoneyToBalance(dto.getPhoneNumber, dto.getSum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Wir senden JSON
{
        "numberPhone": 888000,
       //  "nameCustomer" можно вообще не указывать
        "balance": 130
}
Zum Schluss kommen wir zu Cookie. Was ist Cookie ? Einfach ausgedrückt: Cookies speichern Daten, die der Browser einmalig von einer Anwendung erhält und die dann wiederholt auf der Website verwendet werden können. Sie müssen zwei grundlegende Dinge wissen: wie man ein Cookie schreibt und wie man es liest. So schreiben Sie: Der gesamte Spring Web MVC wird auf der Servlet-API implementiert, die um zwei Objekte herum aufgebaut ist: Die Anfrage vom Client wird in einen HttpSerlvetRequest verpackt und die Antwort wird aus dem mit Ihrem Code gefüllten HttpServletResponse generiert. Durch den Zugriff auf diese Objekte haben Sie die volle Kontrolle über die gesamte HTTP-Sitzung. Mit Spring Web können Sie direkt auf diese Objekte zugreifen. Normalerweise Cookie, erstellen wir eine Methode im Controller
//записать куки
 @GetMapping(value = "/set-cookie")
public ResponseEntity<?> setCookie(HttpServletResponse response) throws IOException {
     Cookie cookie = new Cookie("data", "Come_to_the_dark_side");//создаем ein Objekt Cookie,
     //в конструкторе указываем значения для name и value
     cookie.setPath("/");//устанавливаем путь
     cookie.setMaxAge(86400);//здесь устанавливается время жизни куки
     response.addCookie(cookie);//добавляем Cookie в Anfrage
     response.setContentType("text/plain");//устанавливаем контекст
     return ResponseEntity.ok().body(HttpStatus.OK);//получилось Wie бы два раза статус ответа установoder, выбирайте Wieой вариант лучше
 }
Lassen Sie uns in Postman eine GET-Anfrage unter der Adresse http://localhost:8080/set-cookie stellen und die Ausgabe wird in Ordnung sein. Oberhalb des Fensters finden Sie die Aufschrift Cookie(1). Wenn Sie darauf klicken, werden die von uns gesendeten Cookies angezeigt. Name: Daten, Wert: Come_to_the_dark_side. Informationen zu den Hauptfunktionen der Cookie-Klasse in Java. So lesen Sie: Noch einfacher zu lesen
//прочитать куки
@GetMapping(value = "/get-cookie")
public ResponseEntity<?> readCookie(@CookieValue(value = "data") String data) {
    return ResponseEntity.ok().body(data);
}
In @CookieValue geben wir den Namen des Cookies an, dessen Wert wir lesen, und zeigen den gelesenen Wert in der Antwort an. Come_to_the_dark_side Jetzt ist die schönste Stunde gekommen. Header ( Header , schauen Sie sich nicht den Artikel über PHP an, er ist sehr nützlich zu lesen): Sehen wir uns zunächst an, wie Sie die Header lesen können:
//прочитать заголовки
@GetMapping(value = "/get-headers")
public ResponseEntity<?> getHeaders(@RequestHeader Map<String, String> headers){//представляет заголовки ввиде мапы,
    //где ключ это наименование заголовка, а Bedeutung мапы - это Bedeutung заголовка
    return ResponseEntity.ok(headers);
}
Die Hauptarbeit wird von @RequestHeader Map<String, String> erledigt . Es stellt Header in Form einer Karte dar, wobei der Schlüssel der Name des Headers und der Wert der Karte der Wert des Headers ist. Interessanter ist es, diese Methode mit einem Browser zu testen, den Browser zu öffnen, http://localhost:8080/get-headers in die Suchleiste einzugeben und als Ergebnis erhalten wir eine umfangreiche Liste von Headern. Google jeden Titel, um zu verstehen, warum er benötigt wird. Wikipedia bietet auch eine Titelliste an. „Wenn jemand etwas liest, dann hat es jemand aufgeschrieben“, lautet ein altes Programmiersprichwort. Schreiben wir den Titel auf
//записать заголовок
@GetMapping(value = "/set-header")
public ResponseEntity<?> setHeader(){
    return ResponseEntity.ok().header("name-header","value-header").body(HttpStatus.OK);
}
Hier haben wir eine spezielle Header- Methode der ResponseEntity- Klasse verwendet . Dabei ist „name-header“ der Name des Headers und „value-header“ der Wert des Headers. Es gibt andere Möglichkeiten, mit Headern zu arbeiten
//еще варианты работы с заголовками
@GetMapping(value = "/set-headers")
public ResponseEntity<?> setHeaders() {
    HttpHeaders httpHeaders = new HttpHeaders();//создаем ein Objekt
    //который имплементирует мапу MultiValueMap<String, String>
    //наполняем ее парами ключ-Bedeutung
    //можно наполнить своими заголовками через метод add
    httpHeaders.add("customer-header", "value-header1");
    //HttpHeaders так же предлагает большой выбор стандартных заголовков
    //Посмотрите на них набрав в IDEA HttpHeaders.
    httpHeaders.add(HttpHeaders.FROM, "russia");
    //можно изменить существующий заголовок, вызвав для него сет-метод
    httpHeaders.setDate(0);
    //oder получить Bedeutung конкретного заголовка
    Long date = httpHeaders.getDate();
    System.out.println(date);
    return ResponseEntity
            .ok().headers(httpHeaders)//здесь метод принимающий MultiValueMap<String, String>
            .body(HttpStatus.OK);
}
Hier verwenden wir eine andere Methode der ResponseEntity-Klasse, die einen Wert vom Typ MultiValueMap<String, String> annimmt . Es wird auch informativer sein, zu überprüfen, wie es im Browser funktioniert. Wir gehen zur Adresse http://localhost:8080/set-headers und erhalten eine Antwort, dass der Status OK ist. Wenn Sie großartig sind und Google Chrome verwenden, drücken Sie die Tastenkombination Strg + Umschalt + I und gehen Sie zu „Entwicklertools“. Suchen Sie dann im oberen Bereich nach der Registerkarte „ Netzwerk “ . Wenn Sie darauf klicken, suchen Sie nach dem Eintrag: set-headers ( Wenn es nicht vorhanden ist, aktualisieren Sie die Seite.) Klicken Sie dort und wählen Sie im sich öffnenden Fenster die Registerkarte „Kopfzeilen“ aus. In „ResponseHeaders“ sehen wir unsere Kopfzeilen. Um sich mit den Schlagzeilen vertraut zu machen, reicht das vorerst. Lesen Sie jetzt: ResponseEntity<!--?--> studieren und in Spring-Controllern loswerden . Damit verabschiede ich mich 🤓, wir sehen uns wieder...
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION