programing

Swagger TypeError: '창'에서 'fetch'를 실행하지 못했습니다. GET/HEAD 메서드를 사용하는 요청에는 본문을 사용할 수 없습니다.

newstyles 2023. 3. 10. 21:18

Swagger TypeError: '창'에서 'fetch'를 실행하지 못했습니다. GET/HEAD 메서드를 사용하는 요청에는 본문을 사용할 수 없습니다.

Spring Boot 2 응용 프로그램에 Swagger를 추가했습니다.

Swagger 설정은 다음과 같습니다.

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        // @formatter:off
        return new Docket(DocumentationType.SWAGGER_2)  
                .select()                                  
                .apis(RequestHandlerSelectors.any())              
                .paths(PathSelectors.any())                          
                .build();
        // @formatter:on
    }
}

이것은 Maven 의존관계입니다.

<!-- Swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.8.0</version>
</dependency>

를 들어 http://localhost:8080/api/actuator/audites를 호출하려고 하면 실패하고 다음 오류가 발생합니다.

TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.

여기에 이미지 설명 입력

내가 무엇을 잘못하고 있고 어떻게 그것을 고치는가?

나는 이 문제에 부딪쳤다.해결 방법은 다음과 같습니다.

다음과 같은 방법이 있었습니다.

[HttpGet]
public IEnumerable<MyObject> Get(MyObject dto)
{
      ...
}

에러가 나고 있었어요.swagger UI는 Get 파라미터를 FromBody로 해석하고 있기 때문에 이 파라미터는curl -dflag. [FromQuery] 데코레이터를 추가했더니 문제가 해결되었습니다.

[HttpGet]
public IEnumerable<MyObject> Get([FromQuery]MyObject dto)
{
      ...
}

참고로 이 방법은 UI 익스피리언스도 변경합니다.json을 지정하는 대신 매개 변수 개체의 각 속성에 대한 양식 필드가 있습니다.

에러 메세지는, 실제로 문제의 원인을 나타내고 있습니다.GET을 사용하려고 할 때 -d 옵션을 사용하여 컬이 있는 데이터를 게시합니다.

-d 옵션을 사용하면 POST가 실행됩니다.
-X GET 옵션을 사용하면 GET이 됩니다.

HTTP GET 메서드는 지정된 자원의 표현을 요구합니다.GET을 사용하는 요청은 데이터만 가져와야 하므로 본문을 가질 수 없습니다.

GET vs POST 상세

.net core 2.0 솔루션과 요소 ID를 헤더 키로 사용하거나 본문의 파라미터로 검색하는 GET 메서드에서도 같은 문제가 있었습니다.그것은 구현하기에 가장 좋은 방법은 아니지만 특별한 경우이다.

이 논의에서 언급한 바와 같이.HTTP 사양에서는 GET에서 body를 사용하는 것을 금지하고 있지 않지만, swagger는 이와 같이 body를 실장하고 있지 않습니다.GET Requests에 body에서 정상적으로 동작하는API가 있는 경우에도

또한 swagger 프런트엔드는 null/정의되지 않은/빈 개체인 경우에도 이 본문 개체를 요청에 추가합니다.d "body_content_here" 파라미터입니다.따라서 ID로만 검색하고 본문이 비어 있는 경우에도 빈 개체(-d "{})가 전송되어 언급된 오류가 발생합니다.

가능한 해결책:

  • 이 요청에 대해 우체국 앱을 사용하기 시작합니다. 정상적으로 작동합니다.테스트 완료.

  • 보다 고도의 GET 요구(기준에 의한 검색 등)를 독립된 POST 방법으로 이행하는 것을 검토한다.

  • -d 매개 변수 없이 스웨거 생성 CURL 요청 사용

Get 메서드에서 메서드 유형을 전달하지 마십시오.

let res = await fetch("http://localhost:8080/employee_async",{
                method: "POST",
                body:JSON.stringify(data),
                mode:"cors",
                headers: {"Content-type":"application/json;charset=utf-8"}})

이것은 게시에만 사용됩니다. 자동으로 Get 메서드로 간주되는 메서드 유형 노드를 할당하지 않으면

이 오류를 방지하려면 컨트롤러의 파라미터에 @RequestParam을 사용하여 주석을 달아주세요.

@GetMapping("/get")
public Response getData(@RequestParam String param)

swagger 예외/에러 메시지를 보면 입력 본문 세트를 사용하여 Get method를 호출하고 있는 것 같습니다.GET 방법 설명서에 따르면 어떤 본문도 허용되지 않습니다.GET 방식을 POST 방식으로 변경해야 합니다.그건 작동할 거야.

이 수 꼭 하세요. @RequestMapping(value = "/<your path>" , method = RequestMethod.POST) .@RequestBody

Swagger UI에서도 같은 에러가 발생했습니다.문제는 API Method를 GET으로 잘못 표시하여 요청 본문에 데이터를 전송했다는 것입니다.주석을 @GET에서 @POST로 변경하면 문제가 해결되었습니다.

본문에 GET http 메서드를 사용했기 때문입니다.Json body 등을 사용하는 경우 POST http 메서드를 사용해야 합니다.예를 들어 컨트롤러 클래스의 경우 메서드의 맨 위에 있습니다.

    @PostMapping(value = "/save")
    public ResponseEntity<HttpStatus> savePerson(@RequestBody Person person) 
    {...}

본문 없이 GET을 사용합니다.

메서드 InPut에 [FromQuery]가 있는 파레미터 통과

Ruby On Rails 앱에서 Swagger UI를 사용하려고 할 때 이 문제가 발생했습니다.curl 명령어 정보 컨테이너를 변경하여 수정하였습니다.다음 행의 예를 나타냅니다.

parameter name: :body, in: :body, schema: {'$ref' => '#/definitions/ActivitiesFilter'}, required: true

안으로

parameter name: :attribute_name1, in: :query, required: true
parameter name: :attribute_name2, in: :query, required: true
parameter name: :attribute_name3, in: :query, required: true

내부 스키마에서 정의된 속성 개수만큼 행을 추가해야 합니다.swagger_helper

이 오류는 잘못된 인수 유형에서 발생합니다."FromBody"를 "FromQuery"로 변경하기만 하면 됩니다.

저도 비슷한 문제에 직면했는데, 이제 해결됐어요.HTTPGET through Body에는 파라미터를 전달할 수 없습니다.파라미터를 HTTPGet에 전달하려면 [FromRoute]또는 [FromQuery]의 2가지 방법이 있습니다.

[FromRoute]를 사용하는 경우

[HttpGet("{param1}/{param2}")]        
public Person Get([FromRoute]string param1, string param2)
{
}

Person Controller의 경우 클라이언트 측에서 URL은 http://localhost:000/api/person/value1/value2여야 합니다.

[FromQuery]를 사용하는 경우

[HttpGet]        
public Person Get([FromQuery]string param1, string param2)
{
}

클라이언트 측에서 URL은 http://localhost:000/api/person?param1=value1&param2=value2여야 합니다.

언급URL : https://stackoverflow.com/questions/48749252/swagger-typeerror-failed-to-execute-fetch-on-window-request-with-get-head