当前位置: 首页 > 知识库问答 >
问题:

swagger-ui.html 400 个错误请求

唐煜
2023-03-14

我已经把swagger融入了我的春装项目中。所有swaggerendpoint都工作正常,但< code >/product/swagger-ui . html 给出400错误。

在我的application.properties文件中,我使用了< code > server . context path =/product 。

在我的控制器中,我有以下映射,我认为这些映射导致了错误。

产品控制者.java

@RestController
public class ProductRestController {

    // some autowired services

    @GetMapping("/{id}")
    public ResponseEntity<ProductDTO> getProductById(
            @Min(value = 1, message = "id {javax.validation.constraints.Min.message}") @PathVariable Long id,
            @RequestAttribute Long tenantId) {
        return ResponseEntity.ok(productService.getProductById(id, tenantId));
    }

    @PutMapping("/{id}")
    public ResponseEntity<ProductDTO> updateProduct(
            @Min(value = 1, message = "id {javax.validation.constraints.Min.message}") @PathVariable Long id,
            @RequestBody HashMap<String, Object> requestBody, @RequestAttribute Long tenantId,
            @RequestAttribute Long userId) {

        ProductDTO productDTO;
        try {
            productDTO = objectMapper.convertValue(requestBody, ProductDTO.class);
        } catch (IllegalArgumentException e) {
            throw new HttpMessageNotReadableException(e.getMessage(), e);
        }

        Set<ConstraintViolation<ProductDTO>> errors = validator.validate(productDTO, ProductDTO.UpdateProduct.class);

        if (!errors.isEmpty()) {
            throw new ConstraintViolationException(errors);
        }

        return ResponseEntity.ok(productService.updateProduct(productDTO, requestBody, id, tenantId, userId));
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<?> deleteProduct(
            @Min(value = 1, message = "id {javax.validation.constraints.Min.message}") @PathVariable Long id,
            @RequestAttribute Long tenantId,
            @RequestParam(required = false, name = "delete_members") boolean deleteMembers) {
        productService.deleteProduct(id, tenantId, deleteMembers);
        return ResponseEntity.status(HttpStatus.NO_CONTENT).body(null);
    }

    //other mappings
}

所以我删除了该映射,并再次检查它是否有效,但这次我得到了HTTP 405错误。再次通过调试,我发现堆栈跟踪显示允许的方法是PUT

然后我删除了这两个映射并进行了检查,它工作正常。

我从中了解到的是,不知何故,Spring正在为/product/swagger-ui.html endpoint选择/product/{id}映射。

问题是为什么会发生这种情况,以及如何解决这个问题?

删除GET映射后在同一方法中捕获到异常:< code > org . spring framework . web . httprequestmethodnotsupportedexception:不支持请求方法“GET”

共有3个答案

糜雪峰
2023-03-14

swagger URL指向ProductRestController,因为它没有自己的任何上下文路径。因此,要解决这个问题,请尝试向ProductRestController添加一个上下文路径,类似于@RequestMapping("v1 ")。

那么您的swagger URL http://localhost:8080/swagger-ui . html应该可以工作,因为它不会指向任何控制器。

太叔岳
2023-03-14

你是对的:通过做/{id} spring假设swagger-ui.html是一个id。如果您的base URL =/:http://localhost:8080/swagger-ui . html

傅正豪
2023-03-14

< code > @ get mapping("/{ id } ")在< code>String中给出了< code>id值,您正在直接尝试将String映射到< code>Long。尝试使用:< code > @ path variable String id ,然后将字符串转换为Long,如下所示:

Long longId = Long.parseLong(id);
 类似资料:
  • 我是个大摇大摆的新手。我有以下代码: 这是我得到的json的一部分: Json有两个问题我不明白: 我有两个openWork接口,一个GET接口和一个POST接口,但是Json只包含POST接口。 对于一些接口,我得到500响应的“模式”:{“$ref”:“#/定义/错误”},但是我没有这个模式,我不明白为什么我只对一些服务得到它。我定义错了什么?谢谢,Nir

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 我得到了这个错误,有什么想法会导致它吗?我试图发送一个DTO,它有一个扩展抽象类的对象列表,我想这个问题可能是因为DTO中的列表,还是因为抽象类的子类?

  • 我们希望将我们的swagger规范拆分为两个文件。一个包含endpoint,一个包含类型定义,因为类型定义用于多个项目,我们希望避免在多个源位置修复某些内容。 我们使用maven codegen插件来生成模型和api,它可以很好地进行拆分。 但是,请求验证不会,因为它无法遵循对它所显示的类型定义的外部引用。 我们使用swagger-request-validator-spring MVC进行请求验

  • 我在用带栏杆的大摇大摆的块。我其中一个enpoint我有一个图像上传。 在昂首阔步的网站上,它看起来还可以。如果我添加这个图像请求,它有一个标题,一切正常。当我使用其他params并将图像留空时,我得到了,标题是,根据这个答案https://stackoverflow.com/a/37932354我应该添加。然而,在文档中,这个选项只在一般的api设置中,它对我不起作用https://github