SSM+Swagger设置参数是否必须时遇到的400或415错误

大家在做SSM项目时对于设置传参的必须或非必须这个需求应该是比较常见的,那么正常的两种情况应该是:

  1. 对于必须参数应该是不传会出错,传则正常获取;
  2. 对于非必须参数应该是不传默认为null(当然也可以修改默认值),传则正常获取。

一般设置SSM方法参数可以有:直接参数名字对应,或者使用@RequestParam注解,或者使用@Model注解等多个方式,这里就不详细说明了,总之是没有什么大问题的。

那么问题来了,为什么在我加入Swagger的@ApiParam注解之后,就会出现问题呢:

  1. 对于必须参数来说,设置@ApiParam(required = true)属性就可以了;效果是不传会出错,传则正常获取。(没有出现问题)
  2. 对于非必须参数就有点不对了,在我设置@ApiParam(required = false)或不设置此属性时;效果却是不传会有415错误(不支持媒体类型参数),传则正常获取。(与期望不符)

这里先说下我的解决办法

  1. 对于必须参数来说,需要设置@ApiParam(required = true),以及@RequestParam(required = ture)@RequestParam
  2. 对于非必须参数来说,需要设置@ApiParam@ApiParam(required = false),以及@RequestParam(required = false)

那么这个小问题出现的原因是什么呢?尝试之下认为:

  1. Swagger的@ApiParam注解的required属性值默认为false
  2. 而Spring的@RequestParam注解的required属性值默认为true
  3. 这里应该是Spring的设置会覆盖Swagger设置。

这样的话就会出现虽然@ApiParam设置为false,但是spring还是会认为此参数是必须参数,那么就会导致上面的问题。

【希望能对你的问题有所帮助,支持我的话帮忙点个赞吧!】

你可能感兴趣的:(框架总结)