JavaRush /جاوا بلاگ /Random-SD /بهار خوفناڪ نه آهي. ڪوڪيز ۽ هيڊر

بهار خوفناڪ نه آهي. ڪوڪيز ۽ هيڊر

گروپ ۾ شايع ٿيل
مضمونن جي چڪر جو مواد ورجائڻ سکيا جي ماءُ آهي! تنهن ڪري، پوئين مضمونن جي بنياد تي، اچو ته هڪ نئون ويب اسپرنگ بوٽ پروجيڪٽ ٺاهيو: MobilePhonePayment Connect h2، Lombok. هڪ ادارو پرت ٺاهيو: BalancePhoneEntity Integer id؛ انٽيجر نمبر فون؛ اسٽرنگ جو نالو ڪسٽمر؛ عددي توازن؛ طريقن سان خدمتن جي ھڪڙي پرت ٺاھيو: - ڊيٽابيس ۾ سڀني رڪارڊن جي ڳولا ڪريو - id ذريعي رڪارڊ ڳولھيو - فون نمبر ذريعي رڪارڊ ڳولھيو - صارف جي نالي سان رڪارڊ ڳولھيو (رڪارڊ جي شيٽ کي واپس ڪرڻ گھرجي، نالا شايد ساڳيو هجي)
public List<BalanceEntity> findByNameCustomer(String nameCustomer){
    return balanceRepository.findAllByNameCustomer(nameCustomer);
}
- ڊيٽابيس ۾ رڪارڊ شامل ڪرڻ - id ذريعي ڊيٽابيس مان رڪارڊ کي هٽائڻ - ڪاروباري طريقو: فون جي بيلنس کي مٿي ڪريو - طريقو هڪ فون نمبر وٺڻ گهرجي، هڪ رقم (انٽيجر جو قسم) ۽ مخصوص نمبر سان لاڳاپيل نمبر جي بيلنس کي وڌايو. رقم.
public void addingMoneyToBalance(Integer phoneNumber, Integer sum) {
    BalanceDto byPhoneNumber = findByPhoneNumber(phoneNumber);
    byPhoneNumber.setBalance(byPhoneNumber.getBalance() + sum);
    save(byPhoneNumber);//метод save() – добавление, реализован в сервисе
}
DTO کان اداري ۽ واپس تائين ميپنگ لاڳو ڪرڻ نه وساريو. 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 ٻن nested بلڊر انٽرفيس کي بي نقاب ڪري ٿو: HeadersBuilder ۽ ان جو ذيلي انٽرفيس، BodyBuilder. تنهن ڪري، اسان انهن جي صلاحيتن تائين رسائي ڪري سگهون ٿا ResponseEntity جي جامد طريقن ذريعي. توهان هن مضمون ۾ وڌيڪ پڙهي سگهو ٿا . باقي ڪنٽرولر طريقن کي ھيٺين طور تي لاڳو ڪري سگھجي ٿو: 1) 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);
}
اسان پوسٽمن ۾ ٽيسٽ ڪندا آهيون (اسان ان بابت گذريل مضمون ۾ ڳالهايو، هتي هن پروگرام تي هڪ ٻيو ننڍڙو گائيڊ آهي ). اسان لانچ ڪيو، GET درخواست جو قسم چونڊيو، URL لائن ۾ لکو: http://localhost:8080/find-number-phoneById/1 - اسان سوال واري لائن ۾ id پيٽرول پاس ڪيو، آئوٽ ۾ اسان کي داخلا ملندي id برابر 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);
}
اسان هڪ نئين درخواست ٺاهي، پوسٽ درخواست جو قسم چونڊيو، ۽ URL لائن ۾ لکو: http://localhost:8080/entry. هن درخواست ۾ اسان کي JSON فارميٽ ۾ هڪ اعتراض پاس ڪرڻ جي ضرورت آهي. درخواست واري ونڊو ۾، جسم جي ٽيب تي وڃو، پرچم کي خام تي سيٽ ڪريو، ٽيڪسٽ جي اڳيان تير تي ڪلڪ ڪريو ۽ JSON چونڊيو. ھيٺ ڏنل JSON کي ونڊو ۾ نقل ڪريو:
{
        "numberPhone": 767676,
        "nameCustomer": "Sasha",
        "balance": 100
}
جڏهن اسان ڪلڪ ڪيو درخواست تي عمل ڪريو، جواب جي صورتحال ٺاهي وئي آهي. ھاڻي سوال ڳولھيو سڀ کان پھريائين ۽ پڪ ڪريو ته نئين داخلا ظاهر ٿئي ٿي. 5) id ذريعي داخل ٿيڻ کي ختم ڪرڻ
//удаление записи по 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 - اسان درخواست واري لائن ۾ id پيٽرول پاس ڪيو، اسان حاصل ڪيو اوڪي اسٽيٽس آئوٽ پٽ ۾ . ھاڻي ھڪڙي ٻي درخواست ڪريو سڀني کي ڳولڻ ۽ پڪ ڪريو ته ساشا غائب آھي. 6) 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);
}
اسان هڪ نئين درخواست ٺاهي، PUT درخواست جو قسم چونڊيو، ۽ URL لائن ۾ لکو: http://localhost:8080/change. هن درخواست ۾ ڪيترائي پيرا ميٽر آهن، ۽ جيئن توهان ڏسي سگهو ٿا، اسان انهن کي اڳي ئي سوال جي قطار ۾ نه ٿا ڏيون. @RequestParam تشريح هڪ طريقي ۾ پيرا ميٽرز لاءِ استعمال ٿئي ٿي. پوسٽ مين ذريعي پيرا ميٽرز کي منتقل ڪرڻ لاءِ، توهان کي گذارش ونڊو ۾ Params ٽئب ڏانهن وڃڻو پوندو، ڪي ڪالمن ۾ پيراميٽر (id) جو نالو ڏيکاريو، ۽ Value ڪالمن ۾ قدر (1) کي ظاھر ڪيو. اسان ٻئي پيراميٽر سان ساڳيو ڪم ڪندا آهيون، Key = phoneNumber، Value = 888000. سوال جي اسٽرنگ تي ڌيان ڏيو، پوسٽ مين ان کي تبديل ڪيو ته جيئن پيرا ميٽرز کي صحيح طريقي سان منتقل ڪيو وڃي. آئوٽ پٽ اسٽيٽس OK ڏيکاريندو. ھاڻي سوال ڳولھيو سڀ کان پھريائين ۽ پڪ ڪريو ته پھرين داخلا جو فون نمبر تبديل ٿي ويو آھي. 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
}
آخرڪار اسان اڳتي وڌون ٿا ڪوڪيز ڏانهن. ڪوڪي ڇا آهي ؟ آسان لفظن ۾: ڪوڪيز هڪ ڀيرو برائوزر طرفان ايپليڪيشن مان وصول ڪيل ڊيٽا کي ذخيرو ڪري ٿو، جيڪو پوءِ سائيٽ تي بار بار استعمال ڪري سگهجي ٿو. توهان کي ٻه بنيادي شيون ڄاڻڻ جي ضرورت آهي: ڪيئن لکڻ ۽ ڪيئن پڙهڻ لاء ڪوڪي. ڪيئن لکجي: سمورو اسپرنگ ويب 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 ( headers , نه ڏسو 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”، پوءِ ڏسو نيٽ ورڪ ٽئب مٿين پينل ۾ ، ان تي ڪلڪ ڪري داخل ٿيڻ لاءِ ڏسو: set-headers ( جيڪڏھن اھو اتي نه آھي، صفحي کي ريفريش ڪريو) اتي ڪلڪ ڪريو ۽ ونڊو ۾ جيڪو کلي ٿو، چونڊيو Headers ٽيب ۽ ResponseHeaders ۾ اسان اسان جا ھيڊر ڏسون ٿا. هيڊ لائنز سان واقف ٿيڻ لاء، اهو ڪافي آهي. ھاڻي پڙھو: ResponseEntity<!--?--> ۽ ان کي اسپرنگ ڪنٽرولرز ۾ ختم ڪيو وڃي ان سان، مون کي موڪل ڏيو 🤓، وري ملنداسين...
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION