JavaRush /جاوا بلاگ /Random-UR /بہار خوفناک نہیں ہے۔ کوکیز اور ہیڈر

بہار خوفناک نہیں ہے۔ کوکیز اور ہیڈر

گروپ میں شائع ہوا۔
مضامین کے چکر کے مشمولات تکرار سیکھنے کی ماں ہے! لہذا، پچھلے مضامین کی بنیاد پر، آئیے ایک نیا ویب اسپرنگ بوٹ پروجیکٹ بنائیں: MobilePhonePayment Connect h2، Lombok۔ ایک ہستی کی پرت بنائیں: BalancePhoneEntity Integer id؛ عددی نمبر فون؛ سٹرنگ کا نام کسٹمر؛ عددی توازن؛ طریقوں کے ساتھ خدمات کی ایک پرت بنائیں: - ڈیٹا بیس میں تمام ریکارڈ تلاش کریں - آئی ڈی کے ذریعہ ریکارڈ تلاش کریں - فون نمبر کے ذریعہ ریکارڈ تلاش کریں - صارف کے نام کے ذریعہ ریکارڈ تلاش کریں (ریکارڈ کی شیٹ واپس کرنا چاہئے ، نام ایک جیسا ہو)
public List<BalanceEntity> findByNameCustomer(String nameCustomer){
    return balanceRepository.findAllByNameCustomer(nameCustomer);
}
- ڈیٹا بیس میں ریکارڈ شامل کرنا - آئی ڈی کے ذریعہ ڈیٹا بیس سے ریکارڈ کو ہٹانا - کاروباری طریقہ: فون کا بیلنس ٹاپ اپ - طریقہ کار میں ایک فون نمبر، ایک رقم (انٹیجر کی قسم) لینی چاہیے اور متعلقہ نمبر کے بیلنس کو مخصوص کے مطابق بڑھانا چاہیے۔ رقم
public void addingMoneyToBalance(Integer phoneNumber, Integer sum) {
    BalanceDto byPhoneNumber = findByPhoneNumber(phoneNumber);
    byPhoneNumber.setBalance(byPhoneNumber.getBalance() + sum);
    save(byPhoneNumber);//метод save() – добавление, реализован в сервисе
}
ڈی ٹی او سے ہستی اور پیچھے میپنگ کو لاگو کرنا نہ بھولیں۔ Dto ہستی کی طرح ہو گا: BalancePhoneDto Integer id؛ عددی نمبر فون؛ سٹرنگ کا نام کسٹمر؛ عددی توازن؛ ایک DTO پرت بنائیں، InitiateUtils کلاس بنائیں اور ڈیٹا بیس کو ڈیٹا سے بھریں: id 1، نمبر فون 555000، بیلنس 100، کسٹمر آئیون آئی ڈی 2، نمبر فون 444000، بیلنس 250، کسٹمر ماریہ آئی ڈی 3، نمبر فون 111000، بیلنس 60، کسٹمر آئیون کریٹ ایک آرام کنٹرولر، لیکن اسے طریقوں سے بھرنے کے لیے جلدی نہ کریں۔ اگر آپ پچھلے مضمون کی پیروی کرتے ہیں، تو تمام ریکارڈز کو ظاہر کرنے کا طریقہ کچھ اس طرح سے نکلنا چاہیے تھا (میں اب مضمون کے تبصروں میں دیکھنے کی سفارش کرتا ہوں - خاص طور پر واسیلی بابن کے تبصرے پر):
//поиск записи по 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 کو استعمال کرنے کا ایک اور طریقہ ہے۔ ہم اسے استعمال کرتے رہیں گے۔ ResponseEntity دو نیسٹڈ بلڈر انٹرفیس کو بے نقاب کرتا ہے: HeadersBuilder اور اس کا ذیلی انٹرفیس، BodyBuilder۔ لہذا، ہم ResponseEntity کے جامد طریقوں کے ذریعے ان کی صلاحیتوں تک رسائی حاصل کر سکتے ہیں۔ آپ اس مضمون میں مزید پڑھ سکتے ہیں ۔ باقی کنٹرولر طریقوں کو مندرجہ ذیل کے طور پر لاگو کیا جا سکتا ہے: 1) آئی ڈی کے ذریعہ ریکارڈ کی نمائش
//поиск записи по 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);
}
ہم پوسٹ مین میں ٹیسٹ کرتے ہیں (ہم نے پچھلے مضمون میں اس کے بارے میں بات کی تھی، یہاں اس پروگرام پر ایک اور چھوٹی گائیڈ ہے )۔ ہم شروع کرتے ہیں، GET درخواست کی قسم کو منتخب کرتے ہیں، URL لائن میں لکھتے ہیں: http://localhost:8080/find-number-phoneById/1 - ہم نے استفسار لائن میں آئی ڈی پیرامیٹر کو پاس کیا، آؤٹ پٹ میں ہمیں ایک اندراج موصول ہوگا آئی ڈی 1 کے برابر ہے۔ نیا کوڈ شامل کرنے کے بعد، پروجیکٹ کو دوبارہ شروع کرنا نہ بھولیں😇 2) ریکارڈز کو نام سے ڈسپلے کریں۔
//поиск записи по имени пользователя
@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);
}
آئیے ایک نئی درخواست بنائیں، GET درخواست کی قسم کو منتخب کریں، URL لائن میں لکھیں: http://localhost:8080/ find-number-phoneByName/Ivan - ہم نے سوال لائن میں نام کے پیرامیٹر کو پاس کیا، اور آؤٹ پٹ میں ہم کریں گے۔ Ivan کے برابر نام کسٹمر کے ساتھ ریکارڈ کی فہرست حاصل کریں۔ شاید آؤٹ پٹ میں آپ کو کچھ ایسا ہی ملے گا: %D1%8D%D1%82%D0%BE%20%D0%BD%D0%B5%20%D0%BE%D1%88%D0%B8%D0 %B1%D0%BA%D0%B0 یہ کوئی غلطی نہیں ہے - یہ درخواست کی انکوڈنگ کی خصوصیات ہیں، اس کے بارے میں پڑھیں ۔ اور یہاں پوسٹ مین کو کنفیگر کرنے کا طریقہ لکھا ہے تاکہ ایسا نہ ہو۔ 3) تمام ریکارڈز کا آؤٹ پٹ:
//поиск всех записей
@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);
}
ہم ایک نئی درخواست بناتے ہیں، GET درخواست کی قسم منتخب کریں، URL لائن میں لکھیں: http://localhost:8080/findAll - ہم یہاں کوئی پیرامیٹرز پاس نہیں کرتے ہیں۔ 4) ایک نیا اندراج شامل کرنا:
//добавление новой записи
@PostMapping(value = "/entry")
public ResponseEntity<?> entryNumber(@RequestBody BalanceDto dto){
    balanceService.save(dto);
    return ResponseEntity.ok().body(HttpStatus.CREATED);
}
ہم ایک نئی درخواست بناتے ہیں، POST درخواست کی قسم منتخب کرتے ہیں، اور URL لائن میں لکھتے ہیں: http://localhost:8080/entry۔ اس درخواست میں ہمیں JSON فارمیٹ میں ایک آبجیکٹ پاس کرنے کی ضرورت ہے۔ درخواست کی ونڈو میں، باڈی ٹیب پر جائیں، جھنڈے کو خام پر سیٹ کریں، ٹیکسٹ کے آگے تیر پر کلک کریں اور JSON کو منتخب کریں۔ درج ذیل JSON کو ونڈو میں کاپی کریں:
{
        "numberPhone": 767676,
        "nameCustomer": "Sasha",
        "balance": 100
}
جب ہم درخواست پر عمل درآمد پر کلک کرتے ہیں تو جواب کی حیثیت پیدا ہو جاتی ہے۔ اب فائنڈ آل کو دوبارہ پوچھیں اور یقینی بنائیں کہ ایک نئی اندراج ظاہر ہوتی ہے۔ 5) آئی ڈی کے ذریعہ اندراج کو حذف کرنا
//удаление записи по id
@DeleteMapping(value = "/delete-phoneById/{id}")
public ResponseEntity<?> delete(@PathVariable Integer id) {
    balanceService.delete(id);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
ہم ایک نئی درخواست بناتے ہیں، DELETE درخواست کی قسم کو منتخب کرتے ہیں، URL لائن میں لکھتے ہیں: http://localhost:8080/delete-phoneById/4 - ہم نے درخواست کی لائن میں آئی ڈی پیرامیٹر کو پاس کیا، ہمیں آؤٹ پٹ میں OK کا درجہ ملتا ہے۔ . اب تمام تلاش کرنے کے لیے ایک اور درخواست کریں اور یہ یقینی بنائیں کہ ساشا غائب ہے۔ 6) آئی ڈی کے ذریعہ نمبر تبدیل کرنا
//изменение номера телефона по 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);
}
ہم ایک نئی درخواست بناتے ہیں، PUT درخواست کی قسم منتخب کریں، اور URL لائن میں لکھیں: http://localhost:8080/change۔ اس درخواست میں کئی پیرامیٹرز ہیں، اور جیسا کہ آپ دیکھ سکتے ہیں، ہم انہیں پہلے کی طرح استفسار لائن میں نہیں پاس کرتے ہیں۔ @RequestParam تشریح ایک طریقہ میں پیرامیٹرز کے لیے استعمال ہوتی ہے۔ پوسٹ مین کے ذریعے پیرامیٹرز کی منتقلی کے لیے، آپ کو ریکوئسٹ ونڈو میں Params ٹیب پر جانا ہوگا، کلیدی کالم میں پیرامیٹر (id) کا نام ظاہر کرنا ہوگا، اور ویلیو کالم میں قدر (1) کی نشاندہی کرنا ہوگی۔ ہم دوسرے پیرامیٹر کے ساتھ بھی ایسا ہی کرتے ہیں، Key = phoneNumber، Value = 888000۔ استفسار کے اسٹرنگ پر توجہ دیں، پوسٹ مین نے پیرامیٹر کو درست طریقے سے پاس کرنے کے لیے اسے تبدیل کیا۔ آؤٹ پٹ اسٹیٹس کو ٹھیک دکھائے گا۔ اب FindAll سے دوبارہ استفسار کریں اور یقینی بنائیں کہ پہلی انٹری کا فون نمبر تبدیل ہو گیا ہے۔ 7) اپنے فون کا بیلنس ٹاپ اپ کریں۔
@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);
}
ہم ایک نئی درخواست بناتے ہیں، PUT درخواست کی قسم منتخب کریں، اور URL لائن میں لکھیں: http://localhost:8080/add۔ ہم نے فون نمبر کی ویلیو 888000 پر سیٹ کی، جس کا مجموعہ 130 ہے۔ آؤٹ پٹ OK اسٹیٹس دکھائے گا۔ اب FindAll درخواست کو دوبارہ چلائیں اور یقینی بنائیں کہ پہلے ریکارڈ کا بیلنس بدل گیا ہے۔ 8) درخواست کے باڈی کے ذریعے ڈالیں - ایسا کرنا بہتر ہے تاکہ منتقل شدہ ڈیٹا کو نہ کھولا جائے۔
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(@RequestBody BalanceDto dto){
    balanceService.addingMoneyToBalance(dto.getPhoneNumber, dto.getSum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
ہم JSON بھیجتے ہیں۔
{
        "numberPhone": 888000,
       //  "nameCustomer" можно вообще не указывать
        "balance": 130
}
آخر میں ہم کوکی کی طرف بڑھتے ہیں۔ کوکی کیا ہے ؟ سیدھے الفاظ میں: کوکیز براؤزر کو ایک بار ایپلی کیشن سے موصول ہونے والا ڈیٹا اسٹور کرتی ہے، جسے پھر سائٹ پر بار بار استعمال کیا جا سکتا ہے۔ آپ کو دو بنیادی چیزیں جاننے کی ضرورت ہے: کیسے لکھیں اور کوکی کیسے پڑھیں۔ کیسے لکھیں: پورا Spring Web MVC Servlet API کے اوپر لاگو ہوتا ہے، جو دو اشیاء کے ارد گرد بنایا گیا ہے - کلائنٹ کی درخواست HttpSerlvetRequest میں لپیٹی جاتی ہے، اور جواب آپ کے کوڈ سے بھرے HttpServletResponse سے تیار ہوتا ہے۔ ان اشیاء تک رسائی حاصل کرکے، آپ کو پورے HTTP سیشن پر مکمل کنٹرول حاصل ہوتا ہے۔ اسپرنگ ویب آپ کو ان اشیاء تک براہ راست رسائی کی اجازت دیتا ہے۔ عام طور پر کوکی، آئیے کنٹرولر میں ایک طریقہ بناتے ہیں۔
//записать куки
 @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ой вариант лучше
 }
آئیے ایڈریس پر پوسٹ مین میں ایک GET درخواست کریں: http://localhost:8080/set-cookie اور آؤٹ پٹ ٹھیک ہو جائے گا۔ ونڈو کے اوپر، لکھا ہوا Cookie(1) تلاش کریں، اس پر کلک کرنے سے آپ کو وہ کوکیز نظر آئیں گی جو ہم نے بھیجی ہیں۔ نام: ڈیٹا، قدر: Come_to_the_dark_side. جاوا میں کوکی کلاس کی اہم خصوصیات کے بارے میں معلومات ۔ کیسے پڑھیں: پڑھنے میں بھی آسان
//прочитать куки
@GetMapping(value = "/get-cookie")
public ResponseEntity<?> readCookie(@CookieValue(value = "data") String data) {
    return ResponseEntity.ok().body(data);
}
@CookieValue میں ہم کوکی کے نام کی نشاندہی کرتے ہیں جس کی قدر ہم پڑھیں گے، اور جواب میں پڑھنے کی قدر ظاہر کرتے ہیں۔ Come_to_the_dark_side اب بہترین وقت آ گیا ہے Header ( ہیڈر ، PHP کے بارے میں مضمون کو مت دیکھیں، یہ پڑھنا کافی مفید ہے): پہلے، آئیے دیکھتے ہیں کہ آپ ہیڈرز کو کیسے پڑھ سکتے ہیں:
//прочитать заголовки
@GetMapping(value = "/get-headers")
public ResponseEntity<?> getHeaders(@RequestHeader Map<String, String> headers){//представляет заголовки ввиде мапы,
    //где ключ это наименование заголовка, а meaning мапы - это meaning заголовка
    return ResponseEntity.ok(headers);
}
بنیادی کام @RequestHeader Map<String, String> کے ذریعے کیا جاتا ہے، یہ نقشے کی شکل میں ہیڈرز کی نمائندگی کرتا ہے، جہاں کلید ہیڈر کا نام ہے، اور نقشے کی قدر ہیڈر کی قدر ہے۔ براؤزر کا استعمال کرتے ہوئے اس طریقہ کو جانچنا زیادہ دلچسپ ہے، براؤزر کھولیں، سرچ بار میں http://localhost:8080/get-headers ٹائپ کریں، اور اس کے نتیجے میں ہمیں ہیڈرز کی ایک وسیع فہرست ملتی ہے۔ گوگل ہر عنوان کو سمجھنے کے لیے کہ ان کی ضرورت کیوں ہے۔ ویکیپیڈیا عنوانات کی فہرست بھی پیش کرتا ہے۔ "اگر کوئی کچھ پڑھتا ہے، تو کسی نے اسے لکھا ہے" ایک پرانی پروگرامنگ کہاوت ہے. آئیے عنوان لکھتے ہیں۔
//записать заголовок
@GetMapping(value = "/set-header")
public ResponseEntity<?> setHeader(){
    return ResponseEntity.ok().header("name-header","value-header").body(HttpStatus.OK);
}
یہاں ہم نے ResponseEntity کلاس کا ایک خاص ہیڈر طریقہ استعمال کیا ہے ۔ جہاں "نام-ہیڈر" ہیڈر کا نام ہے، اور "ویلیو-ہیڈر" ہیڈر کی قدر ہے۔ ہیڈر کے ساتھ کام کرنے کے دوسرے اختیارات ہیں۔
//еще варианты работы с заголовками
@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);
}
یہاں ہم ResponseEntity کلاس کا ایک اور طریقہ استعمال کرتے ہیں، جو MultiValueMap<String, String> کی قسم کی قدر لیتا ہے ۔ یہ چیک کرنا بھی زیادہ معلوماتی ہو گا کہ یہ براؤزر میں کیسے کام کرتا ہے۔ ہم ایڈریس پر جاتے ہیں http://localhost:8080/set-headers، ہمیں جواب ملتا ہے کہ اسٹیٹس ٹھیک ہے۔ اگر آپ بہت اچھے ہیں اور گوگل کروم استعمال کرتے ہیں، تو کلیدی مجموعہ Ctrl + Shift + I دبائیں اور "Developer Tools" پر جائیں، پھر اوپر والے پینل میں نیٹ ورک ٹیب کو تلاش کریں ، اس پر کلک کرکے اندراج تلاش کریں: سیٹ ہیڈر ( اگر یہ وہاں نہیں ہے تو صفحہ کو ریفریش کریں) وہاں پر کلک کریں اور کھلنے والی ونڈو میں ہیڈرز ٹیب کو منتخب کریں اور ResponseHeaders میں ہمیں اپنے ہیڈر نظر آتے ہیں۔ سرخیوں سے واقف ہونے کے لیے، ابھی کے لیے اتنا ہی کافی ہے۔ اب پڑھیں: ResponseEntity کا مطالعہ کر رہا ہوں<!--?--> اور اس کے ساتھ اسپرنگ کنٹرولرز میں اس سے چھٹکارا حاصل کر رہا ہوں ، مجھے رخصت لینے دو 🤓، پھر ملتے ہیں...
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION