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 -d
flag. [FromQuery] 데코레이터를 추가했더니 문제가 해결되었습니다.
[HttpGet]
public IEnumerable<MyObject> Get([FromQuery]MyObject dto)
{
...
}
참고로 이 방법은 UI 익스피리언스도 변경합니다.json을 지정하는 대신 매개 변수 개체의 각 속성에 대한 양식 필드가 있습니다.
에러 메세지는, 실제로 문제의 원인을 나타내고 있습니다.GET을 사용하려고 할 때 -d 옵션을 사용하여 컬이 있는 데이터를 게시합니다.
-d 옵션을 사용하면 POST가 실행됩니다.
-X GET 옵션을 사용하면 GET이 됩니다.
HTTP GET 메서드는 지정된 자원의 표현을 요구합니다.GET을 사용하는 요청은 데이터만 가져와야 하므로 본문을 가질 수 없습니다.
.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¶m2=value2여야 합니다.
언급URL : https://stackoverflow.com/questions/48749252/swagger-typeerror-failed-to-execute-fetch-on-window-request-with-get-head
'programing' 카테고리의 다른 글
Oracle 포트를 포트 8080에서 변경 (0) | 2023.03.10 |
---|---|
Angular JS: 컨트롤러 및 콘텐츠 로드 지연 (0) | 2023.03.10 |
포스트백 후 javascript 기능 실행 (0) | 2023.03.10 |
Woocommerce 3+의 [내 계정 주문(My Account Orders)]테이블에 커스텀 컬럼 추가 (0) | 2023.03.05 |
WP/woocommerce에서 사용자가 'shop_manager'인지 알 수 있는 기능이 있나요? (0) | 2023.03.05 |