web-dev-qa-db-ja.com

Spring Boot + Swagger + SwaggerUIおよび@RequestBodyのデータ型はString

Spring Boot1.4とSwaggerおよびSwaggerUIの使用に問題があります。 @RequestBodyパラメータを使用すると、データ型文字列として表示されます。これは正しくないようです。

@ApiOperation(value = "simple message resource")
@ApiImplicitParams({
        @ApiImplicitParam(name = "message", value = "Message to send", required = true, dataType = "com.larmic.springboot.swagger.rest.dto.MessageDto", paramType = "body")
})
@RequestMapping(value = "/api/message", method = RequestMethod.POST,
        consumes = {"application/json", "application/xml"})
public void sendMessage(@RequestBody MessageDto message) {
    System.out.println("ping");
}

そして

@XmlRootElement(name = "MessageDto")
@XmlAccessorType(XmlAccessType.FIELD)
@ApiModel(value = "MessageDto", description = "TODO")
public class MessageDto {

    @ApiModelProperty(value = "Message content text", required = true, example = "some demo message")
    private String content;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

MessageDtoのフルネームを使用したり、@ ApiModelの正しい値を設定したりして、多くの修正を見つけましたが、何も機能しないようです。

ここで完全な例を作成しました https://github.com/larmic/SpringBootAndSwaggerUI

多分誰かが助けることができます。

7
Lars Michaelis

これはSpringfoxのバグのようです( #1344 )。 @ApiImplicitParamsを使用せずに、メソッドパラメータ自体に@ApiParamアノテーションを付けることで回避できます。

@ApiOperation(value = "simple message resource")
@RequestMapping(value = "/api/message", method = RequestMethod.POST,
        consumes = {"application/json", "application/xml"})
public void sendMessage(@ApiParam(name = "message", value = "Message to send", required = true) @RequestBody MessageDto message) {
    System.out.println("ping");
}
12
g00glen00b