JavaRush /Java blogi /Random-UZ /Bahor qo'rqinchli emas. Cookie va sarlavhalar

Bahor qo'rqinchli emas. Cookie va sarlavhalar

Guruhda nashr etilgan
MAQOLALAR SIKLINING MAZMUNI Takrorlash - bilimning onasi! Shuning uchun, oldingi maqolalarga asoslanib, keling, yangi veb-bahor-boot loyihasini yarataylik: MobilePhonePayment Connect h2, Lombok. Ob'ekt qatlamini yarating: BalancePhoneEntity Integer identifikatori; Butun son Telefon; String nameCustomer; Butun son balansi; Usullar bilan xizmatlar qatlamini yarating: - Ma'lumotlar bazasidagi barcha yozuvlarni qidirish - Id bo'yicha yozuvni qidirish - Telefon raqami bo'yicha yozuvni qidirish - Yozuvni foydalanuvchi nomi bo'yicha qidirish (yozuvlar varag'ini qaytarish kerak, nomlar bo'lishi mumkin). bir xil bo'lsin)
public List<BalanceEntity> findByNameCustomer(String nameCustomer){
    return balanceRepository.findAllByNameCustomer(nameCustomer);
}
- Ma'lumotlar bazasiga yozuv qo'shish - Id bo'yicha ma'lumotlar bazasidan yozuvni o'chirish - Biznes usuli: Telefon balansini to'ldirish - usul telefon raqamini, summani (Integer turi) olishi va tegishli raqam qoldig'ini ko'rsatilgan raqamga oshirishi kerak. miqdori.
public void addingMoneyToBalance(Integer phoneNumber, Integer sum) {
    BalanceDto byPhoneNumber = findByPhoneNumber(phoneNumber);
    byPhoneNumber.setBalance(byPhoneNumber.getBalance() + sum);
    save(byPhoneNumber);//метод save() – добавление, реализован в сервисе
}
DTO dan ob'ektga va orqaga xaritalashni amalga oshirishni unutmang. Dto ob'ektga o'xshash bo'ladi: BalancePhoneDto Integer id; Butun son Telefon; String nameCustomer; Butun son balansi; DTO qatlamini yarating, InitiateUtils sinfini yarating va ma'lumotlar bazasini ma'lumotlar bilan to'ldiring: id 1, raqam Telefon 555000, balans 100, mijoz Ivan id 2, raqamTelefon 444000, balans 250, mijoz Marya id 3, raqamTelefon 111000, balans 60, mijoz Ivan Create dam olish boshqaruvchisi, lekin uni usullar bilan to'ldirishga shoshilmang. Agar siz avvalgi maqolaga amal qilsangiz, unda barcha yozuvlarni ko'rsatish usuli shunday bo'lishi kerak edi (men hozir maqolaga sharhlarni ko'rib chiqishni tavsiya qilaman - ayniqsa Vasiliy Babinning sharhida):
//поиск записи по 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-dan konstruktordan foydalanmasdan foydalanishning yana bir usuli bor. Biz undan foydalanishda davom etamiz. ResponseEntity ikkita o'rnatilgan quruvchi interfeysini ochib beradi: HeadersBuilder va uning pastki interfeysi BodyBuilder. Shuning uchun biz ResponseEntity ning statik usullari orqali ularning imkoniyatlariga kirishimiz mumkin. Ushbu maqolada ko'proq o'qishingiz mumkin . Qolgan boshqaruvchi usullarini quyidagicha amalga oshirish mumkin: 1) Id bo'yicha yozuvni ko'rsatish
//поиск записи по 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 sinovdan o'tkazamiz (Biz bu haqda oldingi maqolada gaplashdik, bu dastur bo'yicha yana bir kichik qo'llanma ). Biz ishga tushiramiz, GET so'rov turini tanlaymiz, URL qatoriga yozamiz: http://localhost:8080/find-number-phoneById/1 - biz so'rovlar qatorida id parametrini o'tkazdik, chiqishda biz yozuvni olamiz. id 1 ga teng. Yangi kodni qo'shgandan so'ng, loyihani qayta ishga tushirishni unutmang😇 2) Yozuvlarni nomi bilan ko'rsatish
//поиск записи по имени пользователя
@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);
}
Keling, yangi so'rov yaratamiz, GET so'rov turini tanlaymiz, URL qatoriga yozamiz: http://localhost:8080/ find-number-phoneByName/Ivan - biz so'rovlar qatorida nom parametrini o'tkazdik va chiqishda biz bo'lamiz. Ivanga teng mijoz nomi bilan yozuvlar ro'yxatini oling. Ehtimol, chiqishda siz shunga o'xshash narsani olasiz: %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 xato emas - bu so'rovni kodlash xususiyatlari, bu haqda o'qing . Va bu erda bu sodir bo'lmasligi uchun Postmanni qanday sozlash kerakligi yozilgan . 3) Barcha yozuvlarning chiqishi:
//поиск всех записей
@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);
}
Biz yangi so'rov yaratamiz, GET so'rov turini tanlaymiz, URL qatoriga yozamiz: http://localhost:8080/findAll - biz bu erda hech qanday parametrlarni o'tkazmaymiz. 4) Yangi yozuv qo'shish:
//добавление новой записи
@PostMapping(value = "/entry")
public ResponseEntity<?> entryNumber(@RequestBody BalanceDto dto){
    balanceService.save(dto);
    return ResponseEntity.ok().body(HttpStatus.CREATED);
}
Biz yangi so'rov yaratamiz, POST so'rov turini tanlaymiz va URL qatoriga yozamiz: http://localhost:8080/entry. Ushbu so'rovda biz JSON formatidagi ob'ektni o'tkazishimiz kerak. So'rov oynasida "Body" yorlig'iga o'ting, bayroqni "raw"ga o'rnating, "Matn" yonidagi o'qni bosing va JSON-ni tanlang. Quyidagi JSON-ni oynaga nusxalash:
{
        "numberPhone": 767676,
        "nameCustomer": "Sasha",
        "balance": 100
}
So'rovni bajarish tugmasini bosganimizda, javob holati YARATILGAN bo'ladi. Endi findAll-ni yana so'rang va yangi yozuv paydo bo'lishiga ishonch hosil qiling. 5) Identifikator bo'yicha yozuvni o'chirish
//удаление записи по id
@DeleteMapping(value = "/delete-phoneById/{id}")
public ResponseEntity<?> delete(@PathVariable Integer id) {
    balanceService.delete(id);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Biz yangi so'rov yaratamiz, DELETE so'rov turini tanlaymiz, URL qatoriga yozamiz: http://localhost:8080/delete-phoneById/4 – so'rov qatorida id parametrini o'tkazdik, chiqishda OK holatini olamiz. . Endi hamma narsani topish uchun yana bir so'rov yuboring va Sasha yo'qolganligiga ishonch hosil qiling. 6) Raqamni id bo'yicha o'zgartirish
//изменение номера телефона по 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);
}
Biz yangi so'rov yaratamiz, PUT so'rov turini tanlaymiz va URL qatoriga yozamiz: http://localhost:8080/change. Ushbu so'rovda bir nechta parametrlar mavjud va siz ko'rib turganingizdek, biz ularni avvalgidek so'rovlar qatoriga o'tkazmaymiz. @RequestParam izohi metoddagi parametrlar uchun ishlatiladi. Parametrlarni Postman orqali o'tkazish uchun siz so'rov oynasidagi Params yorlig'iga o'tishingiz, Kalit ustunida parametr nomini (id) ko'rsatishingiz va Qiymat ustunida qiymatni (1) ko'rsatishingiz kerak. Biz ikkinchi parametr bilan ham xuddi shunday qilamiz, Key = phoneNumber, Value = 888000. So'rovlar qatoriga e'tibor bering, Postman parametrlarni to'g'ri o'tkazish uchun uni o'zgartirdi. Chiqish OK holatini ko'rsatadi. Endi findAll-ni yana so'rang va birinchi kirish uchun telefon raqami o'zgarganligiga ishonch hosil qiling. 7) Telefon balansini to'ldiring
@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);
}
Biz yangi so'rov yaratamiz, PUT so'rov turini tanlaymiz va URL qatoriga yozamiz: http://localhost:8080/add. Telefon raqami qiymatini 888000, yig'indisi 130 ga o'rnatdik. Chiqish OK holatini ko'rsatadi. Endi findAll so'rovini qayta ishga tushiring va birinchi yozuvning balansi o'zgarganligiga ishonch hosil qiling. 8) so'rov tanasi orqali PUT - uzatilgan ma'lumotlarni ochmaslik uchun buni qilish afzaldir
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(@RequestBody BalanceDto dto){
    balanceService.addingMoneyToBalance(dto.getPhoneNumber, dto.getSum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Biz JSON yuboramiz
{
        "numberPhone": 888000,
       //  "nameCustomer" можно вообще не указывать
        "balance": 130
}
Nihoyat, biz Cookie-ga o'tamiz. Cookie nima ? Oddiy qilib aytganda: Cookie-fayllar brauzer tomonidan ilovadan bir marta olingan ma'lumotlarni saqlaydi, keyin ularni saytda qayta-qayta ishlatish mumkin. Siz ikkita asosiy narsani bilishingiz kerak: qanday yozish va Cookie-ni qanday o'qish. Qanday yoziladi: Butun Spring Web MVC ikkita ob'ekt atrofida qurilgan Servlet API-ning tepasida amalga oshiriladi - mijozning so'rovi HttpSerlvetRequest-ga o'raladi va javob kodingiz bilan to'ldirilgan HttpServletResponse-dan hosil bo'ladi. Ushbu ob'ektlarga kirish orqali siz butun HTTP sessiyasi ustidan to'liq nazoratga ega bo'lasiz. Spring web bu ob'ektlarga bevosita kirish imkonini beradi. Odatda Cookie, keling, kontrollerda usul yarataylik
//записать куки
 @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ой вариант лучше
 }
Keling, http://localhost:8080/set-cookie manzilida Postman-da GET so'rovini qilaylik va natija yaxshi bo'ladi. Oynaning tepasida Cookie (1) yozuvini toping, ustiga bosish orqali siz biz yuborgan cookie-fayllarni ko'rasiz. Ism: ma'lumotlar, qiymat: qorong'ilik tomoniga keling. Java-dagi Cookie sinfining asosiy xususiyatlari haqida ma'lumot . Qanday o'qish kerak: o'qish yanada osonroq
//прочитать куки
@GetMapping(value = "/get-cookie")
public ResponseEntity<?> readCookie(@CookieValue(value = "data") String data) {
    return ResponseEntity.ok().body(data);
}
@CookieValue da biz qiymatini o'qiydigan Cookie nomini ko'rsatamiz va javobda o'qish qiymatini ko'rsatamiz. Come_to_the_the_dark_side Endi eng yaxshi soat keldi Sarlavha ( sarlavhalar , PHP haqidagi maqolaga qaramang, o'qish juda foydali): Birinchidan, sarlavhalarni qanday o'qish mumkinligini ko'rib chiqamiz:
//прочитать заголовки
@GetMapping(value = "/get-headers")
public ResponseEntity<?> getHeaders(@RequestHeader Map<String, String> headers){//представляет заголовки ввиде мапы,
    //где ключ это наименование заголовка, а meaning мапы - это meaning заголовка
    return ResponseEntity.ok(headers);
}
Asosiy ish @RequestHeader Map<String, String> tomonidan amalga oshiriladi , u xarita ko'rinishidagi sarlavhalarni ifodalaydi, bu erda kalit sarlavha nomi, xaritaning qiymati esa sarlavhaning qiymati. Ushbu usulni brauzer yordamida sinab ko'rish qiziqroq, brauzerni oching, qidiruv satriga http://localhost:8080/get-headers yozing va natijada biz sarlavhalarning keng ro'yxatini olamiz. Ularning nima uchun kerakligini tushunish uchun har bir sarlavhani Google orqali toping. Vikipediya, shuningdek, sarlavhalar ro'yxatini taqdim etadi. "Agar kimdir biror narsani o'qigan bo'lsa, uni kimdir yozib qo'ygan" degan qadimgi dasturlash maqollari mavjud. Keling, sarlavhani yozamiz
//записать заголовок
@GetMapping(value = "/set-header")
public ResponseEntity<?> setHeader(){
    return ResponseEntity.ok().header("name-header","value-header").body(HttpStatus.OK);
}
Bu erda ResponseEntity sinfining maxsus sarlavha usulidan foydalandik . Bu erda "nom-sarlavha" sarlavha nomi, "qiymat-sarlavha" esa sarlavhaning qiymati. Sarlavhalar bilan ishlashning boshqa variantlari mavjud
//еще варианты работы с заголовками
@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);
}
Bu erda biz MultiValueMap<String, String> tipidagi qiymatni oladigan ResponseEntity sinfining boshqa usulidan foydalanamiz . Brauzerda qanday ishlashini tekshirish ham ko'proq ma'lumotga ega bo'ladi. Biz http://localhost:8080/set-headers manziliga o'tamiz, vaziyat yaxshi degan javobni olamiz. Agar siz zo'r bo'lsangiz va Google Chrome-dan foydalansangiz, Ctrl + Shift + I tugmalar birikmasini bosing va "Ishlab chiquvchilar asboblari" ga o'ting, so'ngra yuqori paneldagi Tarmoq yorlig'ini qidiring , uni bosish orqali yozuvni qidiring: set-headers ( agar u erda bo'lmasa, sahifani yangilang) u yerni bosing va ochilgan oynada Sarlavhalar yorlig'ini tanlang va ResponseHeaders -da biz sarlavhalarimizni ko'ramiz. Sarlavhalar bilan tanishish uchun hozircha kifoya. Endi o'qing: ResponseEntity<!--?-->-ni o'rganish va Spring kontrollerlarida undan xalos bo'lish Shu bilan men ta'tilga chiqaman 🤓, yana ko'rishguncha...
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION