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

Spring REST API Swagger UI@ModelAttribute请求URL和参数类型

阴波峻
2023-03-14

我在尝试使我的swagger UI返回我想要的内容时遇到了一些问题。问题是我想将areaName显示为路径参数类型,而不是Swagger UI中的查询。我可以通过使用@Path可变String“areaName”来做到这一点。

但是我想在单独的请求类中验证区域名称,现在我尝试使用@Valid@ModelAttribute。这样做的问题是Swagger给了我一个无聊的请求URL,例如:

/v1/areas/{areaName}/系列?areaName=测试区

我希望它的显示方式和我使用< code>@PathVariable时一样:

/v1/areas/testarea/series?from=20151201

我曾尝试在requestclass中使用@ApiParam,甚至尝试hidden=true以在控制器中保留@PathVariable,并仅在request class中隐藏 以在Swagger UI中不获得areaName的副本,但隐藏似乎不起作用。我正在使用Swagger/SwaggerUI版本2.3.0。有什么想法吗?

请求类:

public class AreaSeriesRequest {

@ApiParam(value = "Area selector, wich area to get series from.", required = true)
@EnergyAreas
private String areaName;

public String getAreaName() {
    return AreaName;
}

public void setAreaName(String areaName) {
    this.areaName = areaName;
}

控制器:

@RequestMapping(value = "/{areaName}/series", method = GET, produces = json)
@ResponseStatus(HttpStatus.OK)
    public Page<GroupSeriesDto> getAreaSeriesPaginated(
            //@PathVariable String areaName,
            @Valid @ModelAttribute AreaSeriesRequest seriesRequest, BindingResult seriesResult,
            @ModelAttribute PagingRequest pagingRequest,
            Principal currentUser) {

共有1个答案

焦信鸥
2023-03-14

因此,我解决这个问题的方法是仍然使用@PathVariable,但是我为这个参数做了一个单独的验证器,而不是areaName上的@Valid @ModelAttribute。

public class AreaValidator implements Validator {

private static final List<String> types = Arrays.asList(
        "ALL",
        "XX1",
        "XX2",
        "XX3",
        "XX4"
);

@Override
public boolean supports(Class<?> clazz) {
    return String.class.equals(clazz);
}

@Override
public void validate(Object target, Errors e) {
    String value = (String) target;

    if (value == null || !types.contains(value.toUpperCase())) {
        e.reject(String.format("Area '%s' does not exist", value));
    }
}

然后在控制器中使用它,如:

new AreaValidator().validate(areaName, seriesResult);

if (seriesResult.hasErrors())
throw new AreaNotFoundException(areaName);
 类似资料:
  • 我正试图用Angular 2发出HTTP POST请求,如下所示。 但我得到一个错误如下。 Angular2.dev.js:23877异常:计算“NGSubmit”时出错原始异常:SyntaxError:无法对“XMLHttpRequest”执行“Set RequestHeader”:“[object object]”不是有效的HTTP标头字段名。 有人知道我的代码出了什么问题吗?以及如何使用解析

  • 可以在模板中直接使用$Request对象,直接输入它的属性或调用它的大部分方法,但只支持方法的第一个参数; // 调用Request对象的get方法 传入参数为id {$Request.get.id} // 调用Request对象的param方法 传入参数为name {$Request.param.name} // 调用Request对象的param方法 传入参数为post.post_title

  • 可以在模板中直接使用$Request对象,直接输入它的属性或调用它的大部分方法,但只支持方法的第一个参数; // 调用Request对象的get方法 传入参数为id {$Request.get.id} // 调用Request对象的param方法 传入参数为name {$Request.param.name} // 调用Request对象的param方法 传入参数为post.post_title

  • 本文向大家介绍jQuery获取URL请求参数的方法,包括了jQuery获取URL请求参数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery获取URL请求参数的方法。分享给大家供大家参考。具体如下: 调用方法如下: 希望本文所述对大家的jquery程序设计有所帮助。

  • 问题内容: 我需要构建一个GWT应用程序,该应用程序将由具有特定URL参数的外部应用程序调用。 例如: http://www.somehost.com/com.app.client.Order.html?orderId=99999。 如何在GWT应用程序中捕获orderId参数? 问题答案: 尝试, PS GWT可以调用本机javascript,这意味着如果javascript可以完成任务,那么G

  • get请求参数放body里,post请求参数放url上这种是否合理? 有时候参数很少的情况我会让前端把参数放到post的url上,因为我感觉比如有两个参数,我后端要新建一个bean用@RequestBody接收完全没必要 我的想法是:如果get请求的参数可能比较复杂比如有bean的嵌套或者长度比较大超过了容器的限制(不考虑产品涉及是否合理),就可以放在body中,否则就放在url上;如果post请