JavaRush /Блоги Java /Random-TG /Баҳор даҳшатнок нест. Кукиҳо ва сарлавҳаҳо
Павел
Сатҳи

Баҳор даҳшатнок нест. Кукиҳо ва сарлавҳаҳо

Дар гурӯҳ нашр шудааст
МУНДАРИЖАИ ДАВРАИ МАКОЛАХО Такрор — модари дониш! Аз ин рӯ, дар асоси мақолаҳои қаблӣ, биёед лоиҳаи нави веб-баҳорро эҷод кунем: MobilePhonePayment Connect h2, Lombok. Қабати an object эҷод кунед: ID BalancePhoneEntity Integer; Рақами бутуни Телефон; Номи сатр муштарӣ; Тавозуни бутун; Эҷоди як қабати хидматҳо бо усулҳо: - Ҷустуҷӯи ҳама сабтҳо дар пойгоҳи додаҳо - Ҷустуҷӯи сабт аз рӯи 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 то Entity ва бозгашт. Dto ба Entity монанд хоҳад буд: BalancePhoneDto ID Integer; Рақами бутуни Телефон; Номи сатр муштарӣ; Тавозуни бутун; Як қабати DTO эҷод кунед, синфи InitiateUtils эҷод кунед ва пойгоҳи додаҳоро бо маълумот пур кунед: id 1, рақами телефон 555000, тавозуни 100, муштарӣ Ivan id 2, рақами Телефон 444000, тавозуни 250, муштарӣ Маря id 3, рақами телефон 111000, тавозуни 60, муштарӣ Ivan Create як контролери истироҳат, вале шитоб накунед, ки онро бо усулҳои пур. Агар шумо ба мақолаи қаблӣ пайравӣ кунед, пас усули намоиши ҳама сабтҳо бояд чунин бошад (ман ҳоло тавсия медиҳам, ки дар шарҳҳои мақола назар кунед - махсусан дар шарҳи Васorй Бабин):
//поиск записи по 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. Аз ин рӯ, мо метавонем ба қобorятҳои онҳо тавассути усулҳои статикии 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);
}
Мо дар Postman озмоиш мекунем (Мо дар ин бора дар мақолаи қаблӣ сӯҳбат карда будем, ин ҷо боз як дастури хурд дар ин барнома аст ). Мо оғоз мекунем, навъи дархости 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 Ин хато нест - инҳо хусусиятҳои рамзгузории дархост мебошанд, дар бораи он хонед . Ва дар ин ҷо навишта шудааст, ки чӣ тавр Postman-ро танзим кардан мумкин аст, то ин рӯй надиҳад. 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. Дар ин дархост мо бояд an objectро дар формати JSON гузаронем. Дар равзанаи дархост, ба ҷадвали Бадан равед, парчамро ба ҳолати хом муқаррар кунед, тирчаи назди Матнро клик кунед ва JSON-ро интихоб кунед. JSON-и зеринро ба тиреза нусхабардорӣ кунед:
{
        "numberPhone": 767676,
        "nameCustomer": "Sasha",
        "balance": 100
}
Вақте ки мо иҷро кардани дархостро пахш мекунем, ҳолати посух Эҷод карда мешавад. Акнун боз findAll-ро пурсед ва боварӣ ҳосил кунед, ки вуруди нав пайдо мешавад. 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-ро дар сатри дархост гузаштем, Мо дар баромад ҳолати OK -ро мегирем . Акнун боз як дархости ҳамаро пайдо кунед ва боварӣ ҳосил кунед, ки Саша гум шудааст. 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 барои параметрҳо дар усул истифода мешавад. Барои интиқоли параметрҳо тавассути Postman, шумо бояд ба ҷадвали Params дар равзанаи дархост гузаред, номи параметрро (id) дар сутуни Калид нишон диҳед ва қиматро (1) дар сутуни Арзиш нишон диҳед. Мо бо параметри дуюм, Калид = Рақами телефон, Қимат = 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) PUT тавассути мақоми дархост - беҳтар аст, ки ин корро анҷом диҳед, то маълумоти интиқолшуда кушода нашавад
@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
}
Дар охир мо ба Cookie мегузарем. Cookie чист ? Оддӣ карда гӯем: Кукиҳо маълумотеро, ки браузер як маротиба аз барнома гирифтаанд, нигоҳ медоранд, ки баъдан онҳоро дар сайт такроран истифода бурдан мумкин аст. Шумо бояд ду чизи асосиро донед: чӣ гуна навиштан ва чӣ тавр хондани куки. Чӣ тавр нависед: Тамоми Spring Web MVC дар болои API Servlet амалӣ карда мешавад, ки дар атрофи ду an object сохта шудааст - дархост аз муштарӣ дар як HttpSerlvetRequest печонида мешавад ва посух аз HttpServletResponse бо рамзи шумо пур карда мешавад. Бо дастрасӣ ба ин an objectҳо, шумо тамоми сессияи HTTP-ро пурра назорат мекунед. Web Spring ба шумо имкон медиҳад, ки бевосита ба ин an objectҳо дастрасӣ пайдо кунед. Одатан Cookie, биёед дар контроллер як усул эҷод кунем
//записать куки
 @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ой вариант лучше
 }
Биёед дар Postman дар суроғаи GET дархост кунем: http://localhost:8080/set-cookie ва натиҷа хуб хоҳад буд. Дар болои тиреза навиштаҷоти Cookie(1)-ро пайдо кунед, бо пахши он шумо кукиҳоеро, ки мо фиристодаем, хоҳед дид. Ном: маълумот, арзиш: Come_to_the_dark_side. Маълумот дар бораи хусусиятҳои асосии синфи кукиҳо дар java. Чӣ тавр хондан: Хондан ҳатто осонтар аст
//прочитать куки
@GetMapping(value = "/get-cookie")
public ResponseEntity<?> readCookie(@CookieValue(value = "data") String data) {
    return ResponseEntity.ok().body(data);
}
Дар @CookieValue мо номи кукиеро нишон медиҳем, ки арзиши онро мо хоҳем хонд ва арзиши хонданро дар посух нишон медиҳем. Come_to_the_dark_side Акнун соати беҳтарин фаро расид Сарлавҳа ( сарлавҳаҳо , ба мақолаи 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 нависед ва дар натиҷа мо рӯйхати васеи сарлавҳаҳоро мегирем. Ҳар як унвонро Google-ро ҷустуҷӯ кунед, то бифаҳмед, ки чаро онҳо лозиманд. Википедиа инчунин рӯйхати унвонҳоро пешниҳод мекунад. "Агар касе чизе хонда бошад, пас касе онро навиштааст" як ибораи қадимии барномасозист. Биёед сарлавҳаро нависед
//записать заголовок
@GetMapping(value = "/set-header")
public ResponseEntity<?> setHeader(){
    return ResponseEntity.ok().header("name-header","value-header").body(HttpStatus.OK);
}
Дар ин ҷо мо усули махсуси сарлавҳаи синфи ResponseEntity -ро истифода кардем . Дар куҷо "name-header" номи сарлавҳа аст ва "value-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);
}
Дар ин ҷо мо усули дигари синфи ResponseEntity-ро истифода мебарем, ки арзиши навъи MultiValueMap<String, String> -ро мегирад . Он инчунин иттилооти бештар хоҳад буд, то тафтиш чӣ тавр он дар браузер кор мекунад. Мо ба суроғаи http://localhost:8080/set-headers меравем, мо посух мегирем, ки вазъият хуб аст. Агар шумо олиҷаноб бошед ва Google Chrome-ро истифода баред, пас комбинатсияи калидҳои Ctrl + Shift + I -ро пахш кунед ва ба "Асбобҳои таҳиякунанда" гузаред, пас ҷадвали шабакаро дар панели боло ҷустуҷӯ кунед , бо пахш кардани он вурудро ҷустуҷӯ кунед: set-headers ( агар он дар он ҷо набошад, саҳифаро нав кунед) дар он ҷо клик кунед ва дар равзанаи кушодашуда, ҷадвали Сарлавҳаҳоро интихоб кунед ва дар ResponseHeaders мо сарлавҳаҳои худро мебинем. Барои шинос шудан бо сарлавҳаҳо ҳоло бас аст. Акнун бихонед: Омӯзиши ResponseEntity<!--?--> ва аз он халос шудан дар контроллерҳои баҳорӣ Бо ин, иҷозат диҳед, ки ман рухсатӣ диҳам 🤓, бори дигар вохӯрем...
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION