422 Unprocessable Entity on POST request for "http://127.0.0.1:8000/chat/":
{"detail":[{"type":"model_attributes_type","loc":["body"],"msg":"Input should be a valid dictionary or object to extract fields from","input":"{\"query\":\"??\"}"}]}
JSON 문자열이 문자열 자체로 감싸진 상태가 되어 FastAPI는 이를 객체가 아니라 단순 문자열로 해석했던 것. 따라서 FastAPI에서 기대하는 형식인 JSON 객체와 불일치가 발생해 422 오류가 발생
@PostMapping
public ResponseEntity<String> chat(@RequestBody String userMessage) {
-> String이 아닌 DTO 객체 타입으로
@PostMapping
public ResponseEntity<String> chat(@RequestBody UserMessageDto userMessage) {
@RequestBody String을 사용하면 요청 본문을 문자열 그대로 받게 된다고 함.
Spring에서는 @RequestBody 어노테이션을 사용하여 요청 본문에서 JSON 데이터를 Java 객체로 자동으로 변환한다고 함. 이 변환은 Jackson 라이브러리를 기반. 하지만, 만약 요청 본문이 JSON이 아닌 단순한 문자열 형태로 전달된다면, Spring은 이를 자바 객체로 자동으로 변환X.
즉, 자동 객체 변환을 원한다면, DTO 객체를 사용해야 함.
또한 내가 파이썬에 객체타입으로 받게 해놨음....
String 형태로 요청을 보내면 FastAPI는 이를 자동으로 Query 객체(사용자지정객체)로 변환할 수 없기 때문에 파싱이 실패!