-
PostMan 400에러 badRequest error 발생과 해결과정 (Mysql 예약어 오류)spring 2024. 1. 30. 14:43반응형
상황
SpringBoot CRUD 작업을 테스트 하는 과정에서 PostMapping 요청에 대한 PostMan 호출 결과가 400error badRequest가 나왔다.
400에러는 해당 요청이 잘못되었을 때 보내는 상태 코드이다.
주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드이다.
ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 대신 Body에 담겼을 경우 등
원인 분석
우선 Header에 Content-Type이 application/json으로 되어있는지 확인해 볼 필요가 있었고 문제가 없었다.
intelij의 error로그를 보면
2024-01-30 12:02:20.248 WARN 1812 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `cohttp://m.mapleApiTest.projectOne.dto.character.request.CharacterCreateRequest` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator); nested exception is cohttp://m.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `cohttp://m.mapleApiTest.projectOne.dto.character.request.CharacterCreateRequest` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)<EOL> at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 2, column: 5]]
http 요청의 본문(Json)을 해당 클래스의 인스턴스로 반환하는 데에 문제가 있다는 의미이다.
이를 위해 dto 클래스의 기본생성자와 getter를 추가해 주었으나 변함이 없었다.
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'character (name) values ('abc')' at line 1추가로 위와 같은 에러 메시지가 있었다.'character'를 class로 사용하고 있었는데 여기서 문제가 발생한 것이었다.Mysql에서 character는 예약어로서 사용되기 때문에 이를 Table 이름으로서 사용할 경우 오류가 생기게 된다.따라서 기존에 Entity class를 비롯한 각종 메서드의 이름을 characters로 우선 변경해주었더니 PostMan 에서 200ok가 반환되었다.아래는 Mysql 예약어 표이다. 표를 참고하여 변수 및 Table명 선정에 신중을 기해야겠다.ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE CASE CHANGE CHAR CHARACTER CHECK COLLATE COLUMN CONDITION CONSTRAINT CONTINUE CONVERT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR DATABASE DATABASES DAY_HOUR DAY_MICROSECOND DAY_MINUTE DAY_SECOND DEC DECIMAL DECLARE DEFAULT DELAYED DELETE DESC DESCRIBE DETERMINISTIC DISTINCT DISTINCTROW DIV DOUBLE DROP DUAL EACH ELSE ELSEIF ENCLOSED ESCAPED EXISTS EXIT EXPLAIN FALSE FETCH FLOAT FLOAT4 FLOAT8 FOR FORCE FOREIGN FROM FULLTEXT GRANT GROUP HAVING HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE HOUR_SECOND IF IGNORE IN INDEX INFILE INNER INOUT INSENSITIVE INSERT INT INT1 INT2 INT3 INT4 INT8 INTEGER INTERVAL INTO IS ITERATE JOIN KEY KEYS KILL LEADING LEAVE LEFT LIKE LIMIT LINES LOAD LOCALTIME LOCALTIMESTAMP LOCK LONG LONGBLOB LONGTEXT LOOP LOW_PRIORITY MATCH MEDIUMBLOB MEDIUMINT MEDIUMTEXT MIDDLEINT MINUTE_MICROSECOND MINUTE_SECOND MOD MODIFIES NATURAL NOT NO_WRITE_TO_BINLOG NULL NUMERIC ON OPTIMIZE OPTION OPTIONALLY OR ORDER OUT OUTER OUTFILE PRECISION PRIMARY PROCEDURE PURGE READ READS REAL REFERENCES REGEXP RELEASE RENAME REPEAT REPLACE REQUIRE RESTRICT RETURN REVOKE RIGHT RLIKE SCHEMA SCHEMAS SECOND_MICROSECOND SELECT SENSITIVE SEPARATOR SET SHOW SMALLINT SONAME SPATIAL SPECIFIC SQL SQLEXCEPTION SQLSTATE SQLWARNING SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT SSL STARTING STRAIGHT_JOIN TABLE TERMINATED THEN TINYBLOB TINYINT TINYTEXT TO TRAILING TRIGGER TRUE UNDO UNION UNIQUE UNLOCK UNSIGNED UPDATE USAGE USE USING UTC_DATE UTC_TIME UTC_TIMESTAMP VALUES VARBINARY VARCHAR VARCHARACTER VARYING WHEN WHERE WHILE WITH WRITE XOR YEAR_MONTH ZEROFILL 반응형'spring' 카테고리의 다른 글
JMeter를 사용한 API호출 부하 테스트 에러 수정 -2 (1) 2024.02.08 JMeter를 사용한 API호출 부하 테스트 에러 수정 -1 (0) 2024.02.05 [Spring] application.properties/.yml 파일 database 연결 설정 에러 (0) 2024.02.02 [Spring] Maplestory openAPI적용 오류 및 해결과정 (1) 2024.02.01 Spring InteliJ maven을 gradle로 바꾸는 방법(for mac) (0) 2023.07.13