Solución:
Sí por defecto Todos los campos serán opcionales. Para marcar un campo como requerido, puede utilizar la siguiente anotación.
@ApiModelProperty(required = true)
En el método getter del campo que debería ser requerido. Esto no mostrará el campo como “obligatorio”. Pero la etiqueta opcional se eliminará para este campo en la documentación.
Espero que esto ayude.
Se agregó soporte para anotaciones de validación de beans, específicamente para @NotNull, @Min, @Max y @Size en Springfox v2.3.2.
Puede colocar esas anotaciones en cualquiera de sus modelos de API.
Para usarlo, agregue la dependencia springfox-bean-validators:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-bean-validators</artifactId>
</dependency>
Agregue a la clase de configuración de su aplicación:
@Import({springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration.class})
Ver: https://springfox.github.io/springfox/docs/current/#springfox-support-for-jsr-303
Pruebe un código similar en Swagger Configuration:
@Bean
public Docket api() {
List<ResponseMessage> list = new java.util.ArrayList<>();
list.add(new ResponseMessageBuilder().code(500).message("500 message")
.responseModel(new ModelRef("JSONResult«string»")).build());
list.add(new ResponseMessageBuilder().code(401).message("Unauthorized")
.responseModel(new ModelRef("JSONResult«string»")).build());
return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any()).build().securitySchemes(Collections.singletonList(securitySchema()))
.securityContexts(Collections.singletonList(securityContext())).pathMapping("https://foroayuda.es/")
.directModelSubstitute(LocalDate.class, String.class).genericModelSubstitutes(ResponseEntity.class)
.alternateTypeRules(newRule(
typeResolver.resolve(DeferredResult.class,
typeResolver.resolve(ResponseEntity.class, WildcardType.class)),
typeResolver.resolve(WildcardType.class)))
.useDefaultResponseMessages(false).apiInfo(apiInfo()).globalResponseMessage(RequestMethod.GET, list)
.globalResponseMessage(RequestMethod.POST, list);
}
Y en el mapeo del controlador agregue @RequestBody @Valid MyRequestClass req
por ejemplo, si está pasando objetos en el cuerpo de la solicitud, y si está pasando parámetros, agregue algo como @RequestParam(value = "email", required = true, defaultValue = "") String email
Además, vea cómo en el código de configuración cómo hacer referencia a una clase con tipo genérico, es decir "JSONResult«string»"
que está haciendo referencia JSONResult<String>