JavaRush /Blog Java /Random-MS /Musim bunga tidak menakutkan. Kuki & Pengepala

Musim bunga tidak menakutkan. Kuki & Pengepala

Diterbitkan dalam kumpulan
KANDUNGAN KITARAN ARTIKEL Pengulangan adalah ibu kepada pembelajaran! Oleh itu, berdasarkan artikel sebelum ini, mari kita buat projek spring-boot web baharu: MobilePhonePayment Connect h2, Lombok. Buat lapisan entiti: id Integer BalancePhoneEntity; Nombor integerTelefon; String nameCustomer; Baki integer; Buat lapisan perkhidmatan dengan kaedah: - Cari semua rekod dalam pangkalan data - Cari rekod mengikut id - Cari rekod melalui nombor telefon - Cari rekod mengikut nama pengguna (harus mengembalikan helaian rekod, nama mungkin sama)
public List<BalanceEntity> findByNameCustomer(String nameCustomer){
    return balanceRepository.findAllByNameCustomer(nameCustomer);
}
- Menambah rekod ke pangkalan data - Mengalih keluar rekod daripada pangkalan data dengan id - Kaedah perniagaan: Tambah baki telefon - kaedah mesti mengambil nombor telefon, jumlah (jenis integer) dan meningkatkan baki nombor yang sepadan mengikut yang ditentukan jumlah.
public void addingMoneyToBalance(Integer phoneNumber, Integer sum) {
    BalanceDto byPhoneNumber = findByPhoneNumber(phoneNumber);
    byPhoneNumber.setBalance(byPhoneNumber.getBalance() + sum);
    save(byPhoneNumber);//метод save() – добавление, реализован в сервисе
}
Jangan lupa untuk melaksanakan pemetaan dari DTO ke Entiti dan belakang. Dto akan serupa dengan Entiti: BalancePhoneDto id Integer; Nombor integerTelefon; String nameCustomer; Baki integer; Buat lapisan DTO, buat kelas InitiateUtils dan isi pangkalan data dengan data: id 1, nomborTelefon 555000, baki 100, pelanggan Ivan id 2, nomborTelefon 444000, baki 250, pelanggan Marya id 3, nomborTelefon 111000, baki 60, pelanggan Ivan Cipta pengawal rehat, tetapi jangan tergesa-gesa untuk mengisinya dengan kaedah. Sekiranya anda mengikuti artikel sebelumnya, maka kaedah untuk memaparkan semua rekod sepatutnya menjadi seperti ini (saya cadangkan sekarang melihat dalam ulasan artikel - khususnya pada ulasan oleh 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);
}
Terdapat satu lagi cara untuk menggunakan ResponseEntity, tanpa menggunakan pembina. Kami akan terus menggunakannya. ResponseEntity mendedahkan dua antara muka pembina bersarang: HeadersBuilder dan subantara mukanya, BodyBuilder. Oleh itu, kita boleh mengakses keupayaan mereka melalui kaedah statik ResponseEntity. Anda boleh membaca lebih lanjut dalam artikel ini . Kaedah pengawal selebihnya boleh dilaksanakan seperti berikut: 1) Memaparkan rekod dengan 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);
}
Kami menguji di Posman (Kami bercakap mengenainya dalam artikel sebelumnya, berikut adalah satu lagi panduan kecil mengenai program ini ). Kami melancarkan, pilih jenis permintaan GET, tulis dalam baris URL: http://localhost:8080/find-number-phoneById/1 – kami lulus parameter id dalam baris permintaan, dalam output kami akan menerima entri dengan id sama dengan 1. Selepas menambah kod baharu, jangan lupa mulakan semula projek😇 2) Paparkan rekod mengikut nama
//поиск записи по имени пользователя
@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);
}
Mari buat permintaan baharu, pilih jenis permintaan GET, tulis dalam baris URL: http://localhost:8080/ find-number-phoneByName/Ivan - kami lulus parameter nama dalam baris pertanyaan, dan dalam output kami akan dapatkan senarai rekod dengan namaPelanggan sama dengan Ivan. Mungkin dalam output anda akan mendapat sesuatu yang serupa dengan ini: %D1%8D%D1%82%D0%BE%20%D0%BD%D0%B5%20%D0%BE%D1%88%D0%B8%D0 % B1%D0%BA%D0%B0 Ini bukan ralat - ini adalah ciri pengekodan permintaan, baca mengenainya . Dan di sini ditulis bagaimana untuk mengkonfigurasi Posman supaya ini tidak berlaku. 3) Output semua rekod:
//поиск всех записей
@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);
}
Kami membuat permintaan baharu, pilih jenis permintaan GET, tulis dalam baris URL: http://localhost:8080/findAll - kami tidak lulus sebarang parameter di sini. 4) Menambah entri baharu:
//добавление новой записи
@PostMapping(value = "/entry")
public ResponseEntity<?> entryNumber(@RequestBody BalanceDto dto){
    balanceService.save(dto);
    return ResponseEntity.ok().body(HttpStatus.CREATED);
}
Kami membuat permintaan baharu, pilih jenis permintaan POST dan tulis dalam baris URL: http://localhost:8080/entry. Dalam permintaan ini kita perlu menghantar objek dalam format JSON. Dalam tetingkap permintaan, pergi ke tab Badan, tetapkan bendera kepada mentah, klik anak panah di sebelah Teks dan pilih JSON. Salin JSON berikut ke dalam tetingkap:
{
        "numberPhone": 767676,
        "nameCustomer": "Sasha",
        "balance": 100
}
Apabila kita mengklik laksanakan permintaan, status respons DIBUAT. Sekarang tanya findAll sekali lagi dan pastikan masukan baharu muncul. 5) Memadamkan entri dengan id
//удаление записи по id
@DeleteMapping(value = "/delete-phoneById/{id}")
public ResponseEntity<?> delete(@PathVariable Integer id) {
    balanceService.delete(id);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Kami membuat permintaan baharu, pilih jenis permintaan DELETE, tulis dalam baris URL: http://localhost:8080/delete-phoneById/4 – kami lulus parameter id dalam baris permintaan, Kami mendapat status OK dalam output . Sekarang buat permintaan lain untuk mencariSemua dan pastikan Sasha tiada. 6) Menukar nombor dengan 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);
}
Kami membuat permintaan baharu, pilih jenis permintaan PUT, dan tulis dalam baris URL: http://localhost:8080/change. Terdapat beberapa parameter dalam permintaan ini, dan seperti yang anda lihat, kami tidak menghantarnya dalam baris pertanyaan seperti sebelum ini. Anotasi @RequestParam digunakan untuk parameter dalam kaedah. Untuk memindahkan parameter melalui Posman, anda perlu pergi ke tab Params dalam tetingkap permintaan, nyatakan nama parameter (id) dalam lajur Kunci, dan nyatakan nilai (1) dalam lajur Nilai. Kami melakukan perkara yang sama dengan parameter kedua, Kunci = phoneNumber, Nilai = 888000. Perhatikan rentetan pertanyaan, Posmen menukarnya untuk lulus parameter dengan betul. Output akan menunjukkan status OK. Sekarang tanya findAll sekali lagi dan pastikan nombor telefon untuk entri pertama telah berubah. 7) Tambah nilai baki telefon anda
@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);
}
Kami membuat permintaan baharu, pilih jenis permintaan PUT, dan tulis dalam baris URL: http://localhost:8080/add. Kami menetapkan nilai phoneNumber kepada 888000, jumlah kepada 130. Output akan menunjukkan status OK. Sekarang jalankan permintaan findAll sekali lagi dan pastikan baki rekod pertama telah berubah. 8) PUT melalui badan permintaan - adalah lebih baik untuk melakukan ini supaya tidak membuka data yang dihantar
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(@RequestBody BalanceDto dto){
    balanceService.addingMoneyToBalance(dto.getPhoneNumber, dto.getSum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Kami menghantar JSON
{
        "numberPhone": 888000,
       //  "nameCustomer" можно вообще не указывать
        "balance": 130
}
Akhirnya kita beralih kepada Cookie. Apa itu Cookie ? Ringkasnya: Kuki menyimpan data yang diterima sekali oleh penyemak imbas daripada aplikasi, yang kemudiannya boleh digunakan berulang kali di tapak. Anda perlu mengetahui dua perkara asas: cara menulis dan cara membaca Kuki. Cara menulis: Keseluruhan Spring Web MVC dilaksanakan di atas API Servlet, yang dibina di sekeliling dua objek - permintaan daripada klien dibalut dalam HttpSerlvetRequest, dan respons dijana daripada HttpServletResponse yang diisi dengan kod anda. Dengan mempunyai akses kepada objek ini, anda mempunyai kawalan penuh ke atas keseluruhan sesi HTTP. Spring web membolehkan anda mengakses objek ini secara langsung. Biasanya Cookie, mari buat kaedah dalam pengawal
//записать куки
 @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ой вариант лучше
 }
Mari buat permintaan GET dalam Postman di alamat: http://localhost:8080/set-cookie dan output akan OK. Di atas tetingkap, cari Kuki bersurat(1), dengan mengklik padanya anda akan melihat Kuki yang kami hantar. Nama: data, nilai: Come_to_the_dark_side. Maklumat tentang ciri utama kelas Cookie di java. Cara membaca: Lebih mudah dibaca
//прочитать куки
@GetMapping(value = "/get-cookie")
public ResponseEntity<?> readCookie(@CookieValue(value = "data") String data) {
    return ResponseEntity.ok().body(data);
}
Dalam @CookieValue kami menunjukkan nama Kuki yang nilainya akan kami baca dan memaparkan nilai baca dalam respons. Come_to_the_dark_side Kini masa terbaik telah tiba Pengepala ( pengepala , jangan lihat artikel tentang PHP, ia agak berguna untuk dibaca): Mula-mula, mari lihat bagaimana anda boleh membaca pengepala:
//прочитать заголовки
@GetMapping(value = "/get-headers")
public ResponseEntity<?> getHeaders(@RequestHeader Map<String, String> headers){//представляет заголовки ввиде мапы,
    //где ключ это наименование заголовка, а meaning мапы - это meaning заголовка
    return ResponseEntity.ok(headers);
}
Kerja utama dilakukan oleh @RequestHeader Map<String, String> , ia mewakili pengepala dalam bentuk peta, di mana kuncinya ialah nama pengepala, dan nilai peta ialah nilai pengepala. Lebih menarik untuk menguji kaedah ini menggunakan penyemak imbas, buka penyemak imbas, taip http://localhost:8080/get-headers dalam bar carian, dan hasilnya kami mendapat senarai pengepala yang luas. Google setiap tajuk untuk memahami sebab ia diperlukan. Wikipedia juga menawarkan senarai tajuk. "Jika seseorang membaca sesuatu, maka seseorang menulisnya" adalah pepatah lama pengaturcaraan. Jom tulis tajuk
//записать заголовок
@GetMapping(value = "/set-header")
public ResponseEntity<?> setHeader(){
    return ResponseEntity.ok().header("name-header","value-header").body(HttpStatus.OK);
}
Di sini kami telah menggunakan kaedah pengepala khas kelas ResponseEntity . Di mana "pengepala nama" ialah nama pengepala dan "pengepala nilai" ialah nilai pengepala. Terdapat pilihan lain untuk bekerja dengan pengepala
//еще варианты работы с заголовками
@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);
}
Di sini kami menggunakan kaedah lain kelas ResponseEntity, yang mengambil nilai jenis MultiValueMap<String, String> . Ia juga akan menjadi lebih bermaklumat untuk menyemak cara ia berfungsi dalam penyemak imbas. Kami pergi ke alamat http://localhost:8080/set-headers, kami menerima respons bahawa statusnya OK. Jika anda hebat dan menggunakan Google Chrome, kemudian tekan kombinasi kekunci Ctrl + Shift + I dan pergi ke "Alat Pembangun", kemudian cari tab Rangkaian di panel atas , dengan mengkliknya cari entri: set-headers ( jika tiada, muat semula halaman) klik di sana dan dalam tetingkap yang terbuka, pilih tab Pengepala dan dalam ResponseHeaders kami melihat pengepala kami. Untuk berkenalan dengan tajuk berita, itu sudah cukup buat masa ini. Sekarang baca: Mengkaji ResponseEntity<!--?--> dan menyingkirkannya dalam pengawal Spring Dengan itu, izinkan saya bercuti 🤓, jumpa lagi...
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION