skill/Java.Kotlin

[Swawgger] GetMapping @RequestBody Error

have a nice day :D 2023. 8. 24. 11:27
반응형

Http Method : Get 으로 설정 후
Request Data를 @RequestBody로 설정하여 Json으로 처리 할 때, 

@Operation(summary = "목록 조회")
@GetMapping (value="/list")
public Object list (
    @Valid @RequestBody ReqVo req) {
    ......

Swagger 화면

요청 시, 서버 에러 
java.lang.StringIndexOutOfBoundsException: begin -1, end -1, length 329
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3319)
at java.base/java.lang.String.substring(String.java:1874)
....

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing:

<<Required request body is missing>>

이유?

Swagger에서는 Request Method=POST, PUT,PATCH 만 request body를 사용 할 수 있음.

그래서 @GetMapping의 request data에서 @RequestMapping -> @RequestParam으로 변경함.

@Operation(summary = "목록 조회")
@GetMapping (value="/list")
public Object list (
    @Valid @RequestParam ReqVo req) {
    ......
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;


@Getter
@Setter
public class ReqVo {

    @NotNull(message = "구분값이 없습니다.")
    @Pattern(regexp= "A|M", message = "구분값이 잘 못 입력되었습니다.")
    @Schema(description = "구문값(A=관리자,M=회원)", example = "A")
    String type;
}

Swagger에서 요청 하니, 결과는 정상이나 Name과 Description이 안보임
@RequestParam ReqVo req 설정된 req가 Name으로 나옴.

다시 설정

@Operation(summary = "목록 조회")
@GetMapping (value="/list")
@Parameter(name="type", description = "구문값(A=관리자,M=회원)", example = "A")
public Object list (
        @Valid @Schema(hidden = true) ReqVo req) {
    return true;
}

@RequestParam 설정은 가리고, @Parameter 입력 부로 잘 보임

 

정상!

반응형