JavaRush /Blog Jawa /Random-JV /Spring ora medeni. Cookies & Header
Павел
tingkat

Spring ora medeni. Cookies & Header

Diterbitake ing grup
ISI SIKLUS ARTIKEL Repetisi minangka ibu sinau! Mula, adhedhasar artikel sadurunge, ayo nggawe proyek web spring-boot anyar: MobilePhonePayment Connect h2, Lombok. Nggawe lapisan entitas: BalancePhoneEntity Integer id; Nomer integer Telpon; String jeneng Pelanggan; imbangan integer; Nggawe lapisan layanan kanthi cara: - Telusuri kabeh rekaman ing basis data - Telusuri rekaman kanthi id - Telusuri rekaman kanthi nomer telpon - Telusuri rekaman kanthi jeneng pangguna (kudu ngasilake lembar cathetan, jeneng kasebut bisa uga dadi padha)
public List<BalanceEntity> findByNameCustomer(String nameCustomer){
    return balanceRepository.findAllByNameCustomer(nameCustomer);
}
- Nambah rekaman menyang database - Mbusak rekaman saka database kanthi id - Cara bisnis: Ngisi imbangan telpon - cara kasebut kudu njupuk nomer telpon, jumlah (jinis integer) lan nambah imbangan nomer sing cocog karo sing ditemtokake jumlah.
public void addingMoneyToBalance(Integer phoneNumber, Integer sum) {
    BalanceDto byPhoneNumber = findByPhoneNumber(phoneNumber);
    byPhoneNumber.setBalance(byPhoneNumber.getBalance() + sum);
    save(byPhoneNumber);//метод save() – добавление, реализован в сервисе
}
Aja lali ngleksanakake pemetaan saka DTO menyang Entitas lan bali. Dto bakal padha karo Entity: BalancePhoneDto Integer id; Nomer integer Telpon; String jeneng Pelanggan; imbangan integer; Nggawe lapisan DTO, nggawe kelas InitiateUtils lan isi database karo data: id 1, nomerTelpon 555000, saldo 100, pelanggan Ivan id 2, nomerTelpon 444000, saldo 250, pelanggan Marya id 3, nomerTelpon 111000, saldo 60, pelanggan Ivan Nggawe controller liyane, nanging ora Rush kanggo isi karo cara. Yen sampeyan ngetutake artikel sadurunge, mula cara kanggo nampilake kabeh cathetan mesthine kaya mangkene (Aku nyaranake saiki ndeleng komentar ing artikel kasebut - khusus ing 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);
}
Ana cara liya kanggo nggunakake ResponseEntity, tanpa nggunakake konstruktor. Kita bakal terus nggunakake. ResponseEntity mbabarake rong antarmuka pembangun bersarang: HeadersBuilder lan subinterface, BodyBuilder. Mula, kita bisa ngakses kemampuane liwat metode statis ResponseEntity. Sampeyan bisa maca liyane ing artikel iki . Cara kontrol liyane bisa ditindakake kaya ing ngisor iki: 1) Nampilake rekaman kanthi 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);
}
We test ing Postman (We ngedika bab iku ing artikel sadurunge, punika guide cilik liyane ing program iki ). Kita miwiti, pilih jinis panjaluk GET, tulis ing baris URL: http: // localhost: 8080/find-number-phoneById/1 - kita ngliwati parameter id ing baris query, ing output kita bakal nampa entri karo id padha karo 1. Sawise nambah kode anyar, aja lali miwiti maneh proyek😇 2) Tampilake cathetan kanthi jeneng
//поиск записи по имени пользователя
@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);
}
Ayo nggawe panjalukan anyar, pilih jinis panjaluk GET, tulis ing baris URL: http: // localhost: 8080/ find-number-phoneByName/Ivan - kita ngliwati parameter jeneng ing baris query, lan ing output kita bakal entuk dhaptar cathetan kanthi jeneng Pelanggan sing padha karo Ivan. Mbok menawa ing output sampeyan bakal entuk kaya iki: %D1%8D%D1%82%D0%BE%20%D0%BD%D0%B5%20%D0%BE%D1%88%D0%B8%D0 % B1%D0%BA%D0%B0 Iki dudu kesalahan - iki minangka fitur panyuwunan enkoding, waca babagan iki . Lan ing kene wis ditulis carane ngatur Postman supaya iki ora kelakon. 3) Output saka kabeh cathetan:
//поиск всех записей
@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);
}
Kita nggawe panjalukan anyar, pilih jinis panjaluk GET, tulis ing baris URL: http: // localhost: 8080 / findAll - kita ora ngliwati parameter apa wae ing kene. 4) Nambah entri anyar:
//добавление новой записи
@PostMapping(value = "/entry")
public ResponseEntity<?> entryNumber(@RequestBody BalanceDto dto){
    balanceService.save(dto);
    return ResponseEntity.ok().body(HttpStatus.CREATED);
}
Kita nggawe panjalukan anyar, pilih jinis panjalukan POST, lan tulis ing baris URL: http://localhost:8080/entry. Ing panyuwunan iki, kita kudu ngirim obyek ing format JSON. Ing jendhela panyuwunan, pindhah menyang tab Badan, setel gendera dadi mentah, klik panah ing jejere Teks banjur pilih JSON. Salin JSON ing ngisor iki menyang jendhela:
{
        "numberPhone": 767676,
        "nameCustomer": "Sasha",
        "balance": 100
}
Nalika kita klik nglakokaké panjalukan, status respon digawe. Saiki pitakon golekAll maneh lan priksa manawa entri anyar katon. 5) Mbusak entri kanthi id
//удаление записи по id
@DeleteMapping(value = "/delete-phoneById/{id}")
public ResponseEntity<?> delete(@PathVariable Integer id) {
    balanceService.delete(id);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Kita nggawe panjalukan anyar, pilih jinis panjaluk DELETE, tulis ing baris URL: http: // localhost: 8080 / delete-phoneById / 4 - kita ngliwati parameter id ing baris panyuwunan, Kita entuk status OK ing output . Saiki nggawe panjalukan liyane kanggo golekAll lan priksa manawa Sasha ilang. 6) Ngganti nomer kanthi 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);
}
Kita nggawe panjalukan anyar, pilih jinis panjaluk PUT, lan tulis ing baris URL: http: // localhost: 8080 / change. Ana sawetara paramèter ing panyuwunan iki, lan sampeyan bisa ndeleng, kita ora pass ing baris query kaya sadurunge. Anotasi @RequestParam digunakake kanggo paramèter ing sawijining metode. Kanggo nransfer paramèter liwat Postman, sampeyan kudu pindhah menyang tab Params ing jendhela panyuwunan, nuduhake jeneng parameter (id) ing kolom Key, lan nuduhake nilai (1) ing kolom Nilai. Kita nindakake padha karo parameter kapindho, Key = phoneNumber, Nilai = 888000. Pay manungsa waé kanggo senar query, Postman diganti kanggo pass paramèter bener. Output bakal nuduhake status OK. Saiki takon maneh golekAll lan priksa manawa nomer telpon kanggo entri pisanan wis diganti. 7) Tambah saldo telpon
@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);
}
Kita nggawe panjalukan anyar, pilih jinis panjalukan PUT, lan tulis ing baris URL: http://localhost:8080/add. Kita nyetel nilai phoneNumber dadi 888000, jumlah dadi 130. Output bakal nuduhake status OK. Saiki mbukak panjalukan findAll maneh lan priksa manawa imbangan rekaman pisanan wis diganti. 8) PUT liwat awak panyuwunan - luwih becik nindakake iki supaya ora mbukak data sing dikirim
@PutMapping(value = "/add")
public ResponseEntity<?> addingMoney(@RequestBody BalanceDto dto){
    balanceService.addingMoneyToBalance(dto.getPhoneNumber, dto.getSum);
    return ResponseEntity.ok().body(HttpStatus.OK);
}
Kita ngirim JSON
{
        "numberPhone": 888000,
       //  "nameCustomer" можно вообще не указывать
        "balance": 130
}
Akhire kita pindhah menyang Cookie. Apa iku Cookie ? Cukup: Cookie nyimpen data sing ditampa sapisan dening browser saka aplikasi, sing banjur bisa digunakake bola-bali ing situs kasebut. Sampeyan kudu ngerti rong perkara dhasar: carane nulis lan carane maca Cookie. Carane nulis: Kabeh Spring Web MVC dipun ginakaken ing ndhuwur Servlet API, kang dibangun watara rong obyek - panjalukan saka klien kebungkus ing HttpSerlvetRequest, lan respon kui saka HttpServletResponse kapenuhan kode Panjenengan. Kanthi nduweni akses menyang obyek kasebut, sampeyan duwe kontrol penuh ing kabeh sesi HTTP. Spring web ngidini sampeyan ngakses obyek kasebut kanthi langsung. Biasane Cookie, ayo nggawe cara ing pengontrol
//записать куки
 @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ой вариант лучше
 }
Ayo nggawe panjalukan GET ing Postman ing alamat: http: // localhost: 8080 / set-cookie lan output bakal OK. Ndhuwur jendhela, temokake Cookie prasasti (1), kanthi ngeklik sampeyan bakal weruh Cookie sing dikirim. Jeneng: data, nilai: Come_to_the_dark_side. Informasi babagan fitur utama kelas Cookie ing java. Cara maca: Malah luwih gampang diwaca
//прочитать куки
@GetMapping(value = "/get-cookie")
public ResponseEntity<?> readCookie(@CookieValue(value = "data") String data) {
    return ResponseEntity.ok().body(data);
}
Ing @CookieValue kita nunjukake jeneng Cookie sing nilaine bakal diwaca, lan nampilake nilai sing diwaca ing respon. Come_to_the_dark_side Saiki jam paling apik wis teka Header ( header , aja ndeleng artikel babagan PHP, cukup migunani kanggo maca): Pisanan, ayo ndeleng carane sampeyan bisa maca header:
//прочитать заголовки
@GetMapping(value = "/get-headers")
public ResponseEntity<?> getHeaders(@RequestHeader Map<String, String> headers){//представляет заголовки ввиде мапы,
    //где ключ это наименование заголовка, а meaning мапы - это meaning заголовка
    return ResponseEntity.ok(headers);
}
Karya utama ditindakake dening @RequestHeader Map<String, String> , iku nggambarake header ing wangun peta, ing ngendi tombol kasebut minangka jeneng header, lan nilai peta minangka nilai header. Luwih menarik kanggo nyoba cara iki nggunakake browser, mbukak browser, ketik http: // localhost: 8080 / get-headers ing garis telusuran, lan minangka asil kita entuk dhaptar header sing akeh. Google saben judhul kanggo ngerti sebabe dibutuhake. Wikipedia uga nawakake dhaptar judhul. "Yen ana wong sing maca, banjur ana sing nulis" ujare program lawas. Ayo nulis judhul
//записать заголовок
@GetMapping(value = "/set-header")
public ResponseEntity<?> setHeader(){
    return ResponseEntity.ok().header("name-header","value-header").body(HttpStatus.OK);
}
Ing kene kita wis nggunakake metode header khusus saka kelas ResponseEntity . Ngendi "name-header" minangka jeneng header, lan "value-header" minangka nilai header. Ana opsi liyane kanggo nggarap 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);
}
Kene kita nggunakake cara liyane saka kelas ResponseEntity, kang njupuk Nilai saka jinis MultiValueMap<String, String> . Sampeyan uga bakal luwih informatif kanggo mriksa cara kerjane ing browser. Kita menyang alamat http: // localhost: 8080 / set-headers, kita nampa respon yen status kasebut OK. Yen sampeyan hebat lan nggunakake Google Chrome, banjur pencet kombinasi tombol Ctrl + Shift + I lan menyang "Alat Pangembang", banjur goleki tab Jaringan ing panel ndhuwur , kanthi ngeklik goleki entri: set-headers ( yen ora ana, refresh kaca) klik ing kono lan ing jendhela sing mbukak, pilih tab Headers lan ing ResponseHeaders kita ndeleng header kita. Kanggo kenalan karo judhul, cukup kanggo saiki. Saiki waca: Sinau ResponseEntity<!--?--> lan nyingkirake ing pengontrol Spring Kanthi mangkono, ayo aku ninggalake 🤓, nganti ketemu maneh ...
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION