1에서는 하위모듈 프론트가 다른 하위 모듈 백엔드와 연결했다. (좀 이상하긴 하지만)
2에서는 하위모듈 백에서 다른 하위 모듈 백엔드와 연결했다.
계속 안 돼서 Kafka로 처리할까 하다가 결국에는 됐다.
문제는 Member 모듈 백엔드에서 Weather 모듈 백엔드로 데이터가 안 넘어가는 문제였다.
원인은 2가지였다.
1. 데이터를 넘길 때는 JSON / XML로 넘겨야 하는데 WeatherareavoDTO로 넘기려고 했다는 것
@PostMapping("/viewGptAnswer")
public String viewGptAnswer(WeatherareavoDTO weatherareavoDTO, Integer userid) throws JsonProcessingException {
String url = "http://localhost:9002/selectWeatherDataForQuestionToGPT";
ResponseEntity<String> response = restTemplate.postForEntity(url, weatherareavoDTO, String.class);
이런 식으로 되어 있으면 통신은 되는데 받은 곳에서 WeatherareavoDTO의 데이터들이 null로 나온다
2. 받는 측에서 @RequestBody 어노테이션이 있어야 한다는 것
@CrossOrigin(origins = "http://localhost:9001")
@ResponseBody
@PostMapping("/selectWeatherDataForQuestionToGPT")
public List<Object> selectWeatherDataForQuestionToGPT(@RequestBody WeatherareavoDTO weatherareavoDTO) {
모놀리틱으로 할 때는 @RequestBody가 없어도 잘 되었는데 명시적으로 선언해주지 않으면 못 받는 것 같다.
WeatherApiController
@CrossOrigin(origins = "http://localhost:9001")
@ResponseBody
@PostMapping("/selectWeatherDataForQuestionToGPT")
public List<Object> selectWeatherDataForQuestionToGPT(@RequestBody WeatherareavoDTO weatherareavoDTO) {
List<WeatherDataDTO> weatherDataDTOList = connectToWeatherApi(weatherareavoDTO);
List<WQ> wqList = new ArrayList<>();
for(WeatherDataDTO weatherDataDTO : weatherDataDTOList){
WQ wq = new WQ();
BeanUtils.copyProperties(weatherDataDTO, wq);
wqList.add(wq);
}
PQ pqList = dustApiController.selectDustDataForQuestionToGPT(weatherareavoDTO.getCountry(), weatherareavoDTO.getArea());
List<Object> returnList = new ArrayList<>();
returnList.add(pqList);
returnList.add(wqList);
return returnList;
}
DustApiController
@CrossOrigin(origins = "http://localhost:9001")
@ResponseBody
@PostMapping("/viewTodayDust")
public PaticulatemattervoDto viewTodayDust(String country, String area){
PlaceDto placeDto = placeService.findByCountryAndArea(country, area);
return dustApiService.findByStationname(placeDto);
}
이후 처리는 msa(3)에서...
@RequestBody가 있어야 받아오는 이유???
- @RequestBody 어노테이션은 HTTP 요청의 본문(body)에 있는 데이터를 Java 객체로 변환하는 데 사용된다
- 같은 모듈끼리는 Spring에서 알아서 본문(body)으로부터 파라미터를 자동으로 추출하여 메서드의 매개변수에 매핑해준다.
--> @RequestBody가 있어야 받아오는 이유???
1. 다른 모듈끼리는 자동으로 추출해서 매핑해주지 않는다
2, 요청 형식이 잘못되어서 자동으로 추출해서 매핑해주지 않았다
열심히 찾아보고 있는데 아직 잘 모르겠다...
'개인프로젝트 > 기능프로그램_오늘뭐입지' 카테고리의 다른 글
20240518_GPT 답변 구현하기(MSA(3)) (0) | 2024.05.18 |
---|---|
20240518_MSA에서 Kafka 설정하기 (0) | 2024.05.18 |
20240517_Kafka 사용하기 (0) | 2024.05.17 |
20240516_ChatGPT 질문 만들기 + MSA 통합(1) (0) | 2024.05.16 |
20240515_SpringSecurity + JJWT 적용 (2) | 2024.05.15 |