JavaRush /Java Blog /Random-IT /La primavera non fa paura. Cookie e intestazioni
Павел
Livello 11

La primavera non fa paura. Cookie e intestazioni

Pubblicato nel gruppo Random-IT
CONTENUTI DEL CICLO DI ARTICOLI La ripetizione è la madre dell'apprendimento! Pertanto, sulla base degli articoli precedenti, creiamo un nuovo progetto web springboot: MobilePhonePayment Connect h2, Lombok. Crea un livello di entità: BalancePhoneEntity Integer id; Numero interoTelefono; String nomeCliente; Bilancio intero; Creare un livello di servizi con metodi: - Cerca tutti i record nel database - Cerca un record per ID - Cerca un record per numero di telefono - Cerca un record per nome utente (dovrebbe restituire un foglio di record, i nomi potrebbero essere lo stesso)
public List<BalanceEntity> findByNameCustomer(String nameCustomer){
    return balanceRepository.findAllByNameCustomer(nameCustomer);
}
- Aggiunta di un record al database - Rimozione di un record dal database tramite ID - Metodo aziendale: ricaricare il saldo telefonico: il metodo deve prendere un numero di telefono, un importo (tipo intero) e aumentare il saldo del numero corrispondente del valore specificato quantità.
public void addingMoneyToBalance(Integer phoneNumber, Integer sum) {
    BalanceDto byPhoneNumber = findByPhoneNumber(phoneNumber);
    byPhoneNumber.setBalance(byPhoneNumber.getBalance() + sum);
    save(byPhoneNumber);//метод save() – добавление, реализован в сервисе
}
Non dimenticare di implementare la mappatura da DTO a Entity e viceversa. Dto sarà simile all'entità: BalancePhoneDto Integer id; Numero interoTelefono; String nomeCliente; Bilancio intero; Crea un livello DTO, crea la classe InitiateUtils e riempi il database con i dati: id 1, numeroTelefono 555000, saldo 100, cliente Ivan id 2, numeroTelefono 444000, saldo 250, cliente Marya id 3, numeroTelefono 111000, saldo 60, cliente Ivan Create un controller di riposo, ma non affrettarti a riempirlo di metodi. Se segui l'articolo precedente, il metodo per visualizzare tutti i record dovrebbe essere simile a questo (ti consiglio ora di guardare nei commenti all'articolo, in particolare nel commento di Vasily Babin):
//поиск записи по id - старая version
@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);
}
Esiste un altro modo per utilizzare ResponseEntity, senza utilizzare un costruttore. Continueremo a usarlo. ResponseEntity espone due interfacce di build annidate: HeadersBuilder e la sua sottointerfaccia, BodyBuilder. Pertanto, possiamo accedere alle loro capacità tramite i metodi statici di ResponseEntity. Puoi leggere di più in questo articolo . I metodi del resto controller possono essere implementati come segue: 1) Visualizzazione di un record tramite 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);
}
Proviamo in Postman (ne abbiamo parlato nell'articolo precedente, ecco un'altra piccola guida su questo programma ). Lanciamo, selezioniamo il tipo di richiesta GET, scriviamo nella riga URL: http://localhost:8080/find-number-phoneById/1 – abbiamo passato il parametro id nella riga di richiesta, nell'output riceveremo una voce con id uguale a 1. Dopo aver aggiunto il nuovo codice, non dimenticare di riavviare il progetto😇 2) Visualizza i record per nome
//поиск записи по имени пользователя
@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);
}
Creiamo una nuova richiesta, selezioniamo il tipo di richiesta GET, scriviamo nella riga URL: http://localhost:8080/ find-number-phoneByName/Ivan - abbiamo passato il parametro name nella riga di query e nell'output lo faremo ottenere un elenco di record con nomeCliente uguale a Ivan. Forse nell'output otterrai qualcosa di simile a questo: %D1%8D%D1%82%D0%BE%20%D0%BD%D0%B5%20%D0%BE%D1%88%D0%B8%D0 % B1%D0%BA%D0%B0 Questo non è un errore: queste sono funzionalità della codifica delle richieste, leggi a riguardo . E qui è scritto come configurare Postman affinché ciò non accada. 3) Output di tutti i record:
//поиск всех записей
@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);
}
Creiamo una nuova richiesta, selezioniamo il tipo di richiesta GET, scriviamo nella riga dell'URL: http://localhost:8080/findAll - qui non passiamo alcun parametro. 4) Aggiunta di una nuova voce:
//добавление новой записи
@PostMapping(value = "/entry")
public ResponseEntity<?> entryNumber(@RequestBody BalanceDto dto){
    balanceService.save(dto);
    return ResponseEntity.ok().body(HttpStatus.CREATED);
}
Creiamo una nuova richiesta, selezioniamo il tipo di richiesta POST e scriviamo nella riga dell'URL: http://localhost:8080/entry. In questa richiesta dobbiamo passare un oggetto in formato JSON. Nella finestra di richiesta, vai alla scheda Corpo, imposta il flag su raw, fai clic sulla freccia accanto a Testo e seleziona JSON. Copia il seguente JSON nella finestra:
{
        "numberPhone": 767676,
        "nameCustomer": "Sasha",
        "balance": 100
}
Quando facciamo clic su Esegui la richiesta, lo stato della risposta è CREATO. Ora interroga nuovamente findAll e assicurati che venga visualizzata una nuova voce. 5) Eliminazione di una voce tramite id
//удаление записи по id
@DeleteMapping(value = "/delete-phoneById/{id}")
public ResponseEntity<?> delete(@PathVariable Integer id) {
    balanceService.delete(id);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Creiamo una nuova richiesta, selezioniamo il tipo di richiesta DELETE, scriviamo nella riga dell'URL: http://localhost:8080/delete-phoneById/4 – abbiamo passato il parametro id nella riga della richiesta, otteniamo lo stato OK nell'output . Ora fai un'altra richiesta per findAll e assicurati che Sasha manchi. 6) Modifica del numero tramite ID
//изменение номера телефона по id
@PutMapping(value = "/change")
public ResponseEntity<?> changeNumberPhone(
//можно добавлять несколько параметров в request
        @RequestParam(value = "id") Integer id, //добавor один параметр
        @RequestParam(value = "phoneNumber") Integer phoneNumber) //добавor второй параметр
 {
    BalanceDto byId = balanceService.findById(id);
    byId.setNumberPhone(phoneNumber);
    balanceService.save(byId);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Creiamo una nuova richiesta, selezioniamo il tipo di richiesta PUT e scriviamo nella riga dell'URL: http://localhost:8080/change. Ci sono diversi parametri in questa richiesta e, come puoi vedere, non li passiamo nella riga di query come prima. L'annotazione @RequestParam viene utilizzata per i parametri in un metodo. Per trasferire i parametri tramite Postman è necessario accedere alla scheda Params nella finestra di richiesta, indicare il nome del parametro (id) nella colonna Chiave e indicare il valore (1) nella colonna Valore. Facciamo lo stesso con il secondo parametro, Key = phoneNumber, Value = 888000. Presta attenzione alla stringa di query, Postman l'ha modificata per passare correttamente i parametri. L'uscita mostrerà lo stato OK. Ora interroga nuovamente findAll e assicurati che il numero di telefono per la prima voce sia cambiato. 7) Ricarica il saldo del tuo telefono
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(
        //можно добавлять несколько параемров в request
        @RequestParam(value = "phoneNumber") Integer phoneNumber,//добавor один параметр
        @RequestParam(value = "sum") Integer sum) //добавor второй параметр
{
    balanceService.addingMoneyToBalance(phoneNumber, sum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Creiamo una nuova richiesta, selezioniamo il tipo di richiesta PUT e scriviamo nella riga dell'URL: http://localhost:8080/add. Impostiamo il valore phoneNumber su 888000, somma a 130. L'output mostrerà lo stato OK. Ora esegui nuovamente la richiesta findAll e assicurati che il saldo del primo record sia cambiato. 8) PUT tramite l'organismo della richiesta: è preferibile farlo per non aprire i dati trasmessi
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(@RequestBody BalanceDto dto){
    balanceService.addingMoneyToBalance(dto.getPhoneNumber, dto.getSum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Inviamo JSON
{
        "numberPhone": 888000,
       //  "nameCustomer" можно вообще не указывать
        "balance": 130
}
Passiamo infine a Cookie. Cos'è Biscotto ? In poche parole: i cookie memorizzano i dati ricevuti una volta dal browser da un'applicazione, che possono poi essere utilizzati ripetutamente sul sito. Devi sapere due cose fondamentali: come scrivere e come leggere un Cookie. Come scrivere: l'intero Spring Web MVC è implementato sull'API Servlet, che è costruita attorno a due oggetti: la richiesta del client è racchiusa in un HttpSerlvetRequest e la risposta viene generata da HttpServletResponse riempito con il tuo codice. Avendo accesso a questi oggetti, hai il pieno controllo sull'intera sessione HTTP. Spring web ti consente di accedere direttamente a questi oggetti. Solitamente Cookie, creiamo un metodo nel controller
//записать куки
 @GetMapping(value = "/set-cookie")
public ResponseEntity<?> setCookie(HttpServletResponse response) throws IOException {
     Cookie cookie = new Cookie("data", "Come_to_the_dark_side");//создаем an object Cookie,
     //в конструкторе указываем значения для name и value
     cookie.setPath("/");//устанавливаем путь
     cookie.setMaxAge(86400);//здесь устанавливается время жизни куки
     response.addCookie(cookie);//добавляем Cookie в request
     response.setContentType("text/plain");//устанавливаем контекст
     return ResponseEntity.ok().body(HttpStatus.OK);//получилось How бы два раза статус ответа установor, выбирайте Howой вариант лучше
 }
Facciamo una richiesta GET in Postman all'indirizzo: http://localhost:8080/set-cookie e l'output sarà OK. Sopra la finestra trovi la scritta Cookie(1), cliccandoci vedrai i Cookie che abbiamo inviato. Nome: dati, valore: Come_to_the_dark_side. Informazioni sulle caratteristiche principali della classe Cookie in Java. Come leggere: Ancora più facile da leggere
//прочитать куки
@GetMapping(value = "/get-cookie")
public ResponseEntity<?> readCookie(@CookieValue(value = "data") String data) {
    return ResponseEntity.ok().body(data);
}
In @CookieValue indichiamo il nome del Cookie di cui leggeremo il valore e visualizzeremo nella risposta il valore letto. Come_to_the_dark_side Ora è arrivata l'ora più bella Header ( headers , non guardare l'articolo su PHP, è abbastanza utile leggere): Per prima cosa vediamo come leggere le intestazioni:
//прочитать заголовки
@GetMapping(value = "/get-headers")
public ResponseEntity<?> getHeaders(@RequestHeader Map<String, String> headers){//представляет заголовки ввиде мапы,
    //где ключ это наименование заголовка, а meaning мапы - это meaning заголовка
    return ResponseEntity.ok(headers);
}
Il lavoro principale è svolto da @RequestHeader Map<String, String> , rappresenta le intestazioni sotto forma di mappa, dove la chiave è il nome dell'intestazione e il valore della mappa è il valore dell'intestazione. È più interessante testare questo metodo utilizzando un browser, aprire il browser, digitare http://localhost:8080/get-headers nella barra di ricerca e di conseguenza otteniamo un ampio elenco di intestazioni. Cerca su Google ogni titolo per capire perché sono necessari. Wikipedia offre anche un elenco di titoli. "Se qualcuno legge qualcosa, qualcuno lo scrive" è un vecchio detto di programmazione. Scriviamo il titolo
//записать заголовок
@GetMapping(value = "/set-header")
public ResponseEntity<?> setHeader(){
    return ResponseEntity.ok().header("name-header","value-header").body(HttpStatus.OK);
}
Qui abbiamo utilizzato uno speciale metodo di intestazione della classe ResponseEntity . Dove "name-header" è il nome dell'intestazione e "value-header" è il valore dell'intestazione. Esistono altre opzioni per lavorare con le intestazioni
//еще варианты работы с заголовками
@GetMapping(value = "/set-headers")
public ResponseEntity<?> setHeaders() {
    HttpHeaders httpHeaders = new HttpHeaders();//создаем an object
    //который имплементирует мапу MultiValueMap<String, String>
    //наполняем ее парами ключ-meaning
    //можно наполнить своими заголовками через метод add
    httpHeaders.add("customer-header", "value-header1");
    //HttpHeaders так же предлагает большой выбор стандартных заголовков
    //Посмотрите на них набрав в IDEA HttpHeaders.
    httpHeaders.add(HttpHeaders.FROM, "russia");
    //можно изменить существующий заголовок, вызвав для него сет-метод
    httpHeaders.setDate(0);
    //or получить meaning конкретного заголовка
    Long date = httpHeaders.getDate();
    System.out.println(date);
    return ResponseEntity
            .ok().headers(httpHeaders)//здесь метод принимающий MultiValueMap<String, String>
            .body(HttpStatus.OK);
}
Qui utilizziamo un altro metodo della classe ResponseEntity, che accetta un valore di tipo MultiValueMap<String, String> . Sarà anche più informativo verificare come funziona nel browser. Andiamo all'indirizzo http://localhost:8080/set-headers, riceviamo una risposta che lo stato è OK. Se sei bravo e usi Google Chrome, allora premi la combinazione di tasti Ctrl+Shift+I e vai su “Strumenti per sviluppatori”, poi cerca la scheda Rete nel pannello superiore , cliccandola cerca la voce: set-headers ( se non c'è, aggiorna la pagina) clicca lì e nella finestra che si apre, seleziona la scheda Intestazioni e in ResponseHeaders vediamo le nostre intestazioni. Per conoscere i titoli dei giornali, per ora è sufficiente. Ora leggi: Studiare ResponseEntity<!--?--> e sbarazzartene nei controller primaverili Detto questo, permettimi di congedarmi 🤓, ci vediamo di nuovo...
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION