7.springBoot/1)개념_springBoot

springBoot_개념_Day_18

구이제이 2024. 5. 1. 16:46

#JSON을 활용한 데이터 주고받기




●1

 

 

쿼리 스트링은? 중간에 바뀔수가 있다.

 



●2




#TodoController 




package com.shopapi.controller;

 

import com.shopapi.dto.PageRequestDTO;

import com.shopapi.dto.PageResponseDTO;

import com.shopapi.dto.TodoDTO;

import com.shopapi.service.TodoService;

import lombok.RequiredArgsConstructor;

import lombok.extern.log4j.Log4j2;

import org.springframework.web.bind.annotation.*;

 

import java.util.Map;

 

@RestController //JSON 형태의 객체로 반환하는 것입니다.

@RequiredArgsConstructor    //생성자주입 >>>     private final TodoService service; 이렇게 스려고합니다. 또는 autowired

@Log4j2

@RequestMapping("/api/todo")

public class TodoController {

 

   private final TodoService service;

 

   @GetMapping("/{tno}")   //번호 입력

   public TodoDTO get(@PathVariable(name ="tno") Long tno) { //PathVariable :     @GetMapping("/{tno}")   이것을 넘겨받은 것

 

       return service.get(tno); // TodoDTO 타입으로 전송 할것, service로부터 get(tno) 할겁니다.

   }

 

   @GetMapping("/list")

   public PageResponseDTO<TodoDTO> list(PageRequestDTO pageRequestDTO ) {

 

       log.info(pageRequestDTO);

 

       return service.list(pageRequestDTO);

   }

 

   @PostMapping("/")

   public Map<String, Long> register(@RequestBody TodoDTO todoDTO){

       //RequestBody : json메세지를 보낼때 사용합니다.

 

       log.info("*********** TodoDTO: ***********" + todoDTO);

 

       Long tno = service.register(todoDTO);

 

       return Map.of("TNO", tno);

   }

 

   @PutMapping("/{tno}") //PutMapping

   public Map<String, String> modify(

           @PathVariable(name="tno") Long tno,

           @RequestBody TodoDTO todoDTO) {

 

       todoDTO.setTno(tno);

 

       log.info("Modify: " + todoDTO);

 

       service.modify(todoDTO);

 

       return Map.of("RESULT", "SUCCESS");

   }

 

   @DeleteMapping("/{tno}")

   public Map<String, String> remove( @PathVariable(name="tno") Long tno ){

 

       log.info("Remove:  " + tno);

 

       service.remove(tno);

 

       return Map.of("RESULT", "SUCCESS");

   }

 

 

 

}







#RequestBody

 

제이슨떄문에 사용합니다.

 

 




 

#PUT방식





#DELETE




ㅡㅡㅡ 지금부터 리액터와 스프링을 연동해서 쓰는 방법

 

#CORS(Cross-Origin Resource Sharing)

 




 

리액트하고 스프링부트

 

자료주고 받는 것 - ajax/악시오스

 

[출처사이트 : https://docs.tosspayments.com/resources/glossary/cors]



 

[출처사이트 : https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]




#

 

CustomServletConfig






package com.shopapi.config;

 

import com.shopapi.controller.formatter.LocalDateFormatter;

import org.springframework.context.annotation.Configuration;

import org.springframework.format.FormatterRegistry;

import org.springframework.web.servlet.config.annotation.CorsRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

 

 

//CORS(Cross-Origin Resource Sharing) : Ajax를 이용해서 서비스를 호출하게 되면

//cors 때문에 정상적으로 호출이 제한 됨

//CORS 설정은 @Controller가 있는 클래스에 @CrossOrigin을 적용하거나,

//SpringSecurity를 이용하셔 설정

//@CrossOrigin 설정은 모든 컨트롤러에 개별적으로 적용해야 함

// 이 예제는 WebMvcConfigurer의  설정으로 사용

 

 

 

 

 

 

@Configuration

public class CustomServletConfig implements WebMvcConfigurer {

 

   @Override

   public void addFormatters(FormatterRegistry registry) {

 

       registry.addFormatter(new LocalDateFormatter());

       //mvc에게 처리하는 것에 대해서 자동으로 잡을수 있도록

 

   }

 

  

  

  

   @Override

   public void addCorsMappings(CorsRegistry registry) {

 

       registry.addMapping("/**")

               .allowedOrigins("*")

               .allowedMethods("HEAD", "GET", "POST", "PUT", "DELETE", "OPTIONS")

               .maxAge(300)    //최대 이시간 제한을 걸어두었습니다.

               .allowedHeaders("Authorization", "Cache-Control", "Content-Type");

   }

 

 

}



'7.springBoot > 1)개념_springBoot' 카테고리의 다른 글

springBoot_개념_Day_20  (0) 2024.05.09
springBoot_개념_Day_19  (0) 2024.05.02
springBoot_개념_Day_17  (0) 2024.04.30
springBoot_개념_Day_16  (0) 2024.04.29
springBoot_개념_Day_15  (0) 2024.04.26