JavaRush /Java Blog /Random-ID /Musim semi tidak menakutkan. Cookie & Header
Павел
Level 11

Musim semi tidak menakutkan. Cookie & Header

Dipublikasikan di grup Random-ID
ISI SIKLUS ARTIKEL Pengulangan adalah ibu dari pembelajaran! Oleh karena itu, berdasarkan artikel sebelumnya, mari kita buat proyek web spring-boot baru: MobilePhonePayment Connect h2, Lombok. Buat lapisan entitas: BalancePhoneEntity Integer id; Nomor bilangan bulatTelepon; String namaPelanggan; Saldo bilangan bulat; Buat lapisan layanan dengan metode: - Cari semua catatan dalam database - Cari catatan berdasarkan id - Cari catatan berdasarkan nomor telepon - Cari catatan berdasarkan nama pengguna (harus mengembalikan lembar catatan, namanya mungkin menjadi sama)
public List<BalanceEntity> findByNameCustomer(String nameCustomer){
    return balanceRepository.findAllByNameCustomer(nameCustomer);
}
- Menambahkan catatan ke database - Menghapus catatan dari database berdasarkan id - Metode bisnis: Isi ulang saldo telepon - metode harus mengambil nomor telepon, jumlah (tipe Integer) dan menambah saldo nomor yang sesuai dengan 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 mengimplementasikan pemetaan dari DTO ke Entitas dan sebaliknya. Dto akan serupa dengan Entitas: BalancePhoneDto Integer id; Nomor bilangan bulatTelepon; String namaPelanggan; Saldo bilangan bulat; Buat layer DTO, buat kelas InitiateUtils dan isi database dengan data: id 1, nomor Telepon 555000, saldo 100, pelanggan Ivan id 2, nomor Telepon 444000, saldo 250, pelanggan Marya id 3, nomor Telepon 111000, saldo 60, pelanggan Ivan Buat pengontrol istirahat, tapi jangan terburu-buru mengisinya dengan metode. Jika Anda mengikuti artikel sebelumnya, maka metode untuk menampilkan semua catatan seharusnya menjadi seperti ini (saya sarankan sekarang melihat di komentar artikel - khususnya di komentar 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);
}
Ada cara lain untuk menggunakan ResponseEntity, tanpa menggunakan konstruktor. Kami akan terus menggunakannya. ResponseEntity memperlihatkan dua antarmuka pembuat bersarang: HeadersBuilder dan subantarmukanya, BodyBuilder. Oleh karena itu, kita dapat mengakses kemampuannya melalui metode statis ResponseEntity. Anda dapat membaca lebih lanjut di artikel ini . Metode pengontrol lainnya dapat diimplementasikan sebagai berikut: 1) Menampilkan record berdasarkan 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 Tukang Pos (Kami membicarakannya di artikel sebelumnya, berikut panduan kecil lainnya tentang program ini ). Kami meluncurkan, pilih jenis permintaan GET, tulis di baris URL: http://localhost:8080/find-number-phoneById/1 – kami meneruskan parameter id di baris permintaan, di output kami akan menerima entri dengan id sama dengan 1. Setelah menambahkan kode baru, jangan lupa untuk me-restart proyek😇 2) Tampilkan catatan berdasarkan 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 baru, pilih jenis permintaan GET, tulis di baris URL: http://localhost:8080/ find-number-phoneByName/Ivan - kami meneruskan parameter nama di baris kueri, dan di output kami akan dapatkan daftar catatan dengan namaPelanggan sama dengan Ivan. Mungkin di output Anda akan mendapatkan sesuatu yang mirip 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 kesalahan - ini adalah fitur pengkodean permintaan, baca tentang itu . Dan disini tertulis cara mengkonfigurasi Postman agar hal tersebut tidak terjadi. 3) Output dari semua catatan:
//поиск всех записей
@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 baru, pilih jenis permintaan GET, tulis di baris URL: http://localhost:8080/findAll - kami tidak meneruskan parameter apa pun di sini. 4) Menambahkan entri baru:
//добавление новой записи
@PostMapping(value = "/entry")
public ResponseEntity<?> entryNumber(@RequestBody BalanceDto dto){
    balanceService.save(dto);
    return ResponseEntity.ok().body(HttpStatus.CREATED);
}
Kami membuat permintaan baru, memilih jenis permintaan POST, dan menulis di baris URL: http://localhost:8080/entry. Dalam permintaan ini kita perlu meneruskan objek dalam format JSON. Di jendela permintaan, buka tab Isi, atur bendera menjadi mentah, klik panah di sebelah Teks dan pilih JSON. Salin JSON berikut ke jendela:
{
        "numberPhone": 767676,
        "nameCustomer": "Sasha",
        "balance": 100
}
Saat kita mengklik jalankan permintaan, status responsnya DIBUAT. Sekarang tanyakan findAll lagi dan pastikan entri baru muncul. 5) Menghapus entri berdasarkan 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 baru, pilih jenis permintaan DELETE, tulis di baris URL: http://localhost:8080/delete-phoneById/4 – kami meneruskan parameter id di baris permintaan, Kami mendapatkan status OK di output . Sekarang buat permintaan lain untuk menemukan Semua dan pastikan Sasha hilang. 6) Mengubah nomor 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 baru, memilih jenis permintaan PUT, dan menulis di baris URL: http://localhost:8080/change. Ada beberapa parameter dalam permintaan ini, dan seperti yang Anda lihat, kami tidak meneruskannya ke baris kueri seperti sebelumnya. Anotasi @RequestParam digunakan untuk parameter dalam suatu metode. Untuk mentransfer parameter melalui Tukang Pos, Anda perlu membuka tab Params di jendela permintaan, menentukan nama parameter (id) di kolom Kunci, dan menentukan nilai (1) di kolom Nilai. Kami melakukan hal yang sama dengan parameter kedua, Key = phoneNumber, Value = 888000. Perhatikan string kueri, Tukang Pos mengubahnya untuk meneruskan parameter dengan benar. Outputnya akan menunjukkan status OK. Sekarang tanyakan lagi findAll dan pastikan nomor telepon untuk entri pertama telah berubah. 7) Isi ulang saldo telepon 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 baru, memilih jenis permintaan PUT, dan menulis di baris URL: http://localhost:8080/add. Kami menetapkan nilai phoneNumber menjadi 888000, jumlah menjadi 130. Outputnya akan menunjukkan status OK. Sekarang jalankan kembali permintaan findAll dan pastikan saldo record pertama telah berubah. 8) PUT melalui badan permintaan - lebih baik melakukan ini agar tidak membuka data yang dikirimkan
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(@RequestBody BalanceDto dto){
    balanceService.addingMoneyToBalance(dto.getPhoneNumber, dto.getSum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Kami mengirim JSON
{
        "numberPhone": 888000,
       //  "nameCustomer" можно вообще не указывать
        "balance": 130
}
Akhirnya kita beralih ke Cookie. Apa itu kue ? Sederhananya: Cookie menyimpan data yang diterima satu kali oleh browser dari suatu aplikasi, yang kemudian dapat digunakan berulang kali di situs. Anda perlu mengetahui dua hal dasar: cara menulis dan cara membaca Cookie. Cara menulis: Seluruh Spring Web MVC diimplementasikan di atas Servlet API, yang dibangun di sekitar dua objek - permintaan dari klien dibungkus dalam HttpSerlvetRequest, dan respons dihasilkan dari HttpServletResponse yang diisi dengan kode Anda. Memiliki akses ke objek ini memberi Anda kendali penuh atas seluruh sesi HTTP. Spring web memungkinkan Anda mengakses objek-objek ini secara langsung. Biasanya Cookie, mari kita buat metode di 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ой вариант лучше
 }
Mari kita buat permintaan GET di Postman di alamat: http://localhost:8080/set-cookie dan hasilnya akan baik-baik saja. Di atas jendela, temukan tulisannya Kue kering(1), dengan mengkliknya Anda akan melihat Cookie yang kami kirimkan. Nama: data, nilai: Datang_ke_sisi_gelap. Informasi tentang fitur 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);
}
Di @CookieValue kami menunjukkan nama Cookie yang nilainya akan kami baca, dan menampilkan nilai baca dalam responsnya. Come_to_the_dark_side Sekarang saat terbaik telah tiba Header ( headers , jangan lihat artikel tentang PHP, cukup berguna untuk dibaca): Pertama, mari kita lihat bagaimana Anda dapat membaca header:
//прочитать заголовки
@GetMapping(value = "/get-headers")
public ResponseEntity<?> getHeaders(@RequestHeader Map<String, String> headers){//представляет заголовки ввиде мапы,
    //где ключ это наименование заголовка, а meaning мапы - это meaning заголовка
    return ResponseEntity.ok(headers);
}
Pekerjaan utama dilakukan oleh @RequestHeader Map<String, String> , merepresentasikan header dalam bentuk peta, dimana kuncinya adalah nama header, dan nilai map adalah nilai header. Lebih menarik untuk menguji metode ini menggunakan browser, buka browser, ketik http://localhost:8080/get-headers di bilah pencarian, dan sebagai hasilnya kami mendapatkan daftar header yang lengkap. Google masing-masing menuju untuk memahami mengapa mereka dibutuhkan. Wikipedia juga menawarkan daftar judul. “Jika seseorang membaca sesuatu, maka seseorang menuliskannya” adalah pepatah lama dalam pemrograman. Mari kita tuliskan judulnya
//записать заголовок
@GetMapping(value = "/set-header")
public ResponseEntity<?> setHeader(){
    return ResponseEntity.ok().header("name-header","value-header").body(HttpStatus.OK);
}
Di sini kita telah menggunakan metode header khusus dari kelas ResponseEntity . Dimana "name-header" adalah nama headernya, dan "value-header" adalah nilai dari headernya. Ada opsi lain untuk bekerja dengan header
//еще варианты работы с заголовками
@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 kita menggunakan metode lain dari kelas ResponseEntity, yang mengambil nilai bertipe MultiValueMap<String, String> . Akan lebih informatif juga untuk memeriksa cara kerjanya di browser. Kita masuk ke alamat http://localhost:8080/set-headers, kita mendapat respon bahwa statusnya OK. Jika Anda hebat dan menggunakan Google Chrome, tekan kombinasi tombol Ctrl + Shift + I dan buka "Alat Pengembang", lalu cari tab Jaringan di panel atas , dengan mengkliknya cari entri: set-header ( jika tidak ada, segarkan halaman) klik di sana dan di jendela yang terbuka, pilih tab Headers dan di ResponseHeaders kita melihat header kita. Untuk mengetahui headline-headlinenya saja sudah cukup. Sekarang baca: Mempelajari ResponseEntity<!--?--> dan menghilangkannya di pengontrol Spring Dengan itu, izinkan saya pamit 🤓, sampai jumpa lagi...
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION