JavaRush /Java Blogu /Random-AZ /Bahar qorxulu deyil. Kukilər və Başlıqlar
Павел
Səviyyə

Bahar qorxulu deyil. Kukilər və Başlıqlar

Qrupda dərc edilmişdir
MƏQALƏLƏR DÖVRÜNÜN MÜNDƏRİCASI Təkrar öyrənmənin anasıdır! Buna görə də, əvvəlki məqalələrə əsaslanaraq, yeni bir veb yay-boot layihəsi yaradaq: MobilePhonePayment Connect h2, Lombok. Müəssisə təbəqəsi yaradın: BalancePhoneEntity Integer id; Tam ədədTelefon; String nameCustomer; Tam ədəd balansı; Metodlarla xidmətlər təbəqəsi yaradın: - Verilənlər bazasında bütün qeydləri axtarın - İd-yə görə qeyd axtarın - Telefon nömrəsinə görə qeyd axtarın - İstifadəçi adına görə qeyd axtarın (qeydlər vərəqini qaytarmalıdır, adlar ola bilər). eyni olsun)
public List<BalanceEntity> findByNameCustomer(String nameCustomer){
    return balanceRepository.findAllByNameCustomer(nameCustomer);
}
- Verilənlər bazasına qeydin əlavə edilməsi - İd-ə görə verilənlər bazasından qeydin silinməsi - Biznes metodu: Telefon balansının doldurulması - metod telefon nömrəsini, məbləği (Tam tipli) götürməli və müvafiq nömrənin balansını göstərilən qədər artırmalıdır. məbləğ.
public void addingMoneyToBalance(Integer phoneNumber, Integer sum) {
    BalanceDto byPhoneNumber = findByPhoneNumber(phoneNumber);
    byPhoneNumber.setBalance(byPhoneNumber.getBalance() + sum);
    save(byPhoneNumber);//метод save() – добавление, реализован в сервисе
}
DTO-dan Müəssisə və geri xəritələşdirməni həyata keçirməyi unutmayın. Dto Müəssisə oxşar olacaq: BalancePhoneDto Integer id; Tam ədədTelefon; String nameCustomer; Tam ədəd balansı; DTO təbəqəsi yaradın, InitiateUtils sinfini yaradın və verilənlər bazasını məlumatlarla doldurun: id 1, nömrə Telefon 555000, balans 100, müştəri İvan id 2, nömrəTelefon 444000, balans 250, müştəri Marya id 3, nömrəTelefon 111000, balans 60, müştəri İvan Yaradın istirahət nəzarətçisi, lakin onu üsullarla doldurmağa tələsməyin. Əvvəlki məqaləyə əməl etsəniz, bütün qeydləri göstərmək üsulu belə bir şeyə çevrilməli idi (indi məqalənin şərhlərinə baxmağı məsləhət görürəm - xüsusən də Vasili Babinin şərhində):
//поиск записи по 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);
}
ResponseEntity-dən konstruktor istifadə etmədən istifadə etməyin başqa bir yolu var. Bundan istifadə etməyə davam edəcəyik. ResponseEntity iki daxili qurucu interfeysini ifşa edir: HeadersBuilder və onun alt interfeysi, BodyBuilder. Buna görə də biz ResponseEntity-nin statik metodları vasitəsilə onların imkanlarına daxil ola bilərik. Bu məqalədə daha ətraflı oxuya bilərsiniz . İstirahət nəzarətçisi üsulları aşağıdakı kimi həyata keçirilə bilər: 1) İd ilə qeydin göstərilməsi
//поиск записи по 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);
}
Biz Postman-da sınaqdan keçiririk (Bu barədə əvvəlki məqalədə danışdıq, bu proqramda başqa bir kiçik bələdçi var ). Biz işə salırıq, GET sorğu növünü seçirik, URL sətirinə yazırıq: http://localhost:8080/find-number-phoneById/1 – sorğu sətrində id parametrini keçdik, çıxışda bir giriş alacağıq. id 1-ə bərabərdir. Yeni kodu əlavə etdikdən sonra layihəni yenidən başlatmağı unutmayın😇 2) Qeydləri adla göstərin
//поиск записи по имени пользователя
@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);
}
Gəlin yeni sorğu yaradaq, GET sorğu tipini seçək, URL sətirinə yazın: http://localhost:8080/ find-number-phoneByName/Ivan - sorğu sətrində ad parametrini keçdik və çıxışda biz edəcəyik. İvana bərabər olan Müştəri adı ilə qeydlərin siyahısını əldə edin. Yəqin ki, çıxışda buna bənzər bir şey əldə edəcəksiniz: %D1%8D%D1%82%D0%BE%20%D0%BD%D0%B5%20%D0%BE%D1%88%D0%B8%D0 % B1%D0%BA%D0%B0 Bu xəta deyil - bunlar sorğunun kodlaşdırılmasının xüsusiyyətləridir, bu barədə oxuyun . Və burada bunun baş verməməsi üçün Postman-ı necə konfiqurasiya etmək yazılıb . 3) Bütün qeydlərin çıxışı:
//поиск всех записей
@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);
}
Yeni sorğu yaradırıq, GET sorğu növünü seçirik, URL sətrində yazırıq: http://localhost:8080/findAll - burada heç bir parametr keçirmirik. 4) Yeni bir giriş əlavə etmək:
//добавление новой записи
@PostMapping(value = "/entry")
public ResponseEntity<?> entryNumber(@RequestBody BalanceDto dto){
    balanceService.save(dto);
    return ResponseEntity.ok().body(HttpStatus.CREATED);
}
Yeni sorğu yaradırıq, POST sorğu növünü seçirik və URL sətirinə yazırıq: http://localhost:8080/entry. Bu sorğuda biz JSON formatında obyekt ötürməliyik. Sorğu pəncərəsində Bədən sekmesine keçin, bayrağı xam olaraq təyin edin, Mətnin yanındakı oxu klikləyin və JSON seçin. Pəncərəyə aşağıdakı JSON-u kopyalayın:
{
        "numberPhone": 767676,
        "nameCustomer": "Sasha",
        "balance": 100
}
Sorğunu yerinə yetirmək üçün kliklədikdə cavab statusu YARADILDI. İndi findAll-u yenidən sorğulayın və yeni girişin göründüyünə əmin olun. 5) Girişin id ilə silinməsi
//удаление записи по id
@DeleteMapping(value = "/delete-phoneById/{id}")
public ResponseEntity<?> delete(@PathVariable Integer id) {
    balanceService.delete(id);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Yeni sorğu yaradırıq, SİL sorğu növünü seçirik, URL sətirinə yazırıq: http://localhost:8080/delete-phoneById/4 – sorğu sətrində id parametrini keçdik, çıxışda OK statusunu alırıq. . İndi Hamısını tapmaq üçün başqa bir sorğu göndərin və Saşanın itkin olduğuna əmin olun. 6) Nömrənin id ilə dəyişdirilməsi
//изменение номера телефона по 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);
}
Yeni sorğu yaradırıq, PUT sorğu növünü seçirik və URL sətirinə yazırıq: http://localhost:8080/change. Bu sorğuda bir neçə parametr var və gördüyünüz kimi biz onları əvvəlki kimi sorğu sətirinə keçirmirik. @RequestParam annotasiyası metoddakı parametrlər üçün istifadə olunur. Parametrləri Postman vasitəsilə ötürmək üçün sorğu pəncərəsində Params sekmesine keçməli, Açar sütununda parametrin adını (id) göstərməli və Dəyər sütununda dəyəri (1) göstərməlisiniz. İkinci parametrlə də eyni şeyi edirik, Key = phoneNumber, Value = 888000. Sorğu sətirinə diqqət yetirin, Postman parametrləri düzgün ötürmək üçün onu dəyişdi. Çıxış OK statusunu göstərəcək. İndi findAll-u yenidən sorğulayın və ilk giriş üçün telefon nömrəsinin dəyişdiyinə əmin olun. 7) Telefon balansınızı doldurun
@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);
}
Yeni sorğu yaradırıq, PUT sorğu növünü seçirik və URL sətirinə yazırıq: http://localhost:8080/add. Telefon nömrəsini 888000, cəmi 130 olaraq təyin etdik. Çıxış OK statusunu göstərəcək. İndi findAll sorğusunu yenidən işə salın və ilk qeydin balansının dəyişdiyinə əmin olun. 8) Sorğu orqanı vasitəsilə PUT - ötürülən məlumatları açmamaq üçün bunu etmək daha yaxşıdır
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(@RequestBody BalanceDto dto){
    balanceService.addingMoneyToBalance(dto.getPhoneNumber, dto.getSum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
JSON göndəririk
{
        "numberPhone": 888000,
       //  "nameCustomer" можно вообще не указывать
        "balance": 130
}
Nəhayət, Cookie-yə keçirik. Cookie nədir ? Sadə dillə desək: kukilər brauzer tərəfindən bir dəfə proqramdan alınan məlumatları saxlayır, sonra isə saytda təkrar istifadə oluna bilər. Siz iki əsas şeyi bilməlisiniz: necə yazmaq və Cookie oxumaq. Necə yazılmalı: Bütün Spring Web MVC iki obyekt ətrafında qurulmuş Servlet API-nin üstündə həyata keçirilir - müştəridən gələn sorğu HttpSerlvetRequest-ə bükülür və cavab kodunuzla doldurulmuş HttpServletResponse-dən yaradılır. Bu obyektlərə giriş əldə etməklə siz bütün HTTP sessiyasına tam nəzarət edə bilərsiniz. Spring web bu obyektlərə birbaşa daxil olmaq imkanı verir. Adətən Cookie, kontrollerdə bir metod yaradaq
//записать куки
 @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ой вариант лучше
 }
Gəlin, Postman-da http://localhost:8080/set-cookie ünvanında GET sorğusu edək və nəticə yaxşı olacaq. Pəncərənin üstündə Cookie(1) yazısını tapın, üzərinə klikləməklə göndərdiyimiz kukiləri görəcəksiniz. Ad: məlumat, dəyər: Qaranlıq tərəfə gəlin. Java-da Cookie sinfinin əsas xüsusiyyətləri haqqında məlumat . Necə oxumaq olar: Oxumaq daha asandır
//прочитать куки
@GetMapping(value = "/get-cookie")
public ResponseEntity<?> readCookie(@CookieValue(value = "data") String data) {
    return ResponseEntity.ok().body(data);
}
@CookieValue-də biz dəyərini oxuyacağımız Kuki-nin adını göstəririk və cavabda oxunan dəyəri göstəririk. Come_to_the_the_dark_side İndi ən gözəl saat gəldi Başlıq ( başlıqlar , PHP haqqında məqaləyə baxmayın, oxumaq olduqca faydalıdır): Əvvəlcə başlıqları necə oxuya biləcəyinizi görək:
//прочитать заголовки
@GetMapping(value = "/get-headers")
public ResponseEntity<?> getHeaders(@RequestHeader Map<String, String> headers){//представляет заголовки ввиде мапы,
    //где ключ это наименование заголовка, а meaning мапы - это meaning заголовка
    return ResponseEntity.ok(headers);
}
Əsas işi @RequestHeader Map<String, String> yerinə yetirir , o, xəritə şəklində başlıqları təmsil edir, burada açar başlığın adı, xəritənin dəyəri isə başlığın dəyəridir. Brauzer vasitəsilə bu üsulu sınaqdan keçirmək, brauzeri açmaq, axtarış çubuğuna http://localhost:8080/get-headers yazmaq daha maraqlıdır və nəticədə başlıqların geniş siyahısını alırıq. Nə üçün lazım olduğunu anlamaq üçün hər bir başlığı Google-a daxil edin. Vikipediya həmçinin başlıqların siyahısını təqdim edir. "Kimsə bir şey oxudusa, deməli, kimsə onu yazdı" köhnə proqramlaşdırma deyimidir. Başlığı yazaq
//записать заголовок
@GetMapping(value = "/set-header")
public ResponseEntity<?> setHeader(){
    return ResponseEntity.ok().header("name-header","value-header").body(HttpStatus.OK);
}
Burada ResponseEntity sinfinin xüsusi başlıq metodundan istifadə etdik . Burada "ad-başlıq" başlığın adı, "dəyər-başlıq" isə başlığın dəyəridir. Başlıqlarla işləmək üçün başqa variantlar var
//еще варианты работы с заголовками
@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);
}
Burada MultiValueMap<String, String> tipli qiymət alan ResponseEntity sinfinin başqa metodundan istifadə edirik . Brauzerdə necə işlədiyini yoxlamaq daha çox məlumatlandırıcı olacaq. Biz http://localhost:8080/set-headers ünvanına gedirik, statusun yaxşı olduğu barədə cavab alırıq. Əgər siz əlasınızsa və Google Chrome istifadə edirsinizsə, onda Ctrl + Shift + I düymələr kombinasiyasını basın və "Tərtibatçı Alətləri" na keçin, sonra üst paneldə Şəbəkə sekmesini axtarın , üzərinə klikləməklə girişi axtarın: set-headers ( əgər orada deyilsə, səhifəni yeniləyin) ora klikləyin və açılan pəncərədə Başlıqlar sekmesini seçin və ResponseHeaders- də başlığımızı görürük. Başlıqlarla tanış olmaq üçün hələlik bu kifayətdir. İndi oxuyun: ResponseEntity<!--?--> öyrənmək və Spring kontrollerlərində ondan qurtulmaq Bununla icazə verin, məzuniyyətimi götürüm 🤓, yenidən görüşərik...
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION