web-dev-qa-db-ja.com

Java @RequestBody Map <String、String>の入力例を手動で説明するにはどうすればよいですか?

私は、任意のキーと値のペアのMap<String, String>をとるPOSTメソッドの1つであるAPIを設計しています。

@RequestMapping(value = "/start", method = RequestMethod.POST)
public void startProcess(
    @ApiParam(examples = @Example(value = {
        @ExampleProperty(
            mediaType="application/json",
            value = "{\"userId\":\"1234\",\"userName\":\"JoshJ\"}"
        )
    }))
    @RequestBody(required = false) Map<String, String> fields) {
    // .. does stuff
}

fieldsの入力例を提供したいのですが、Swagger出力でレンダリングできないようです。これは@Exampleを使用する正しい方法ではありませんか?

12
Josh J

@ExamplePropertyおよび@ExampleプロパティはすでにSwaggerに実装されていますが、Springfoxはそれらを(まだ)サポートしていません。問題はまだ開いています:

7
g00glen00b

@ g00glen00bの回答に記載されている問題は修正されているようです。これは、その方法のコードスニペットです。

コントローラクラスの場合:

// omitted other annotations
@ApiImplicitParams(
        @ApiImplicitParam(
                name = "body",
                dataType = "ApplicationProperties",
                examples = @Example(
                        @ExampleProperty(
                                mediaType = "application/json",
                                value = "{\"applicationName\":\"application-name\"}"
                        )
                )
        )
)
public Application updateApplicationName(
        @RequestBody Map<String, String> body
) {
    // ...
}

// Helper class for Swagger documentation - see http://springfox.github.io/springfox/docs/snapshot/#q27
public static class ApplicationProperties {

    private String applicationName;

    public String getApplicationName() {
        return applicationName;
    }

    public void setApplicationName(String applicationName) {
        this.applicationName = applicationName;
    }

}

さらに、Swagger構成に次の行を追加する必要があります。

// omitted other imports...
import com.fasterxml.classmate.TypeResolver;

@Bean
public Docket api(TypeResolver resolver) {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build()
            .apiInfo(apiInfo())
            // the following line is important!
            .additionalModels(resolver.resolve(DashboardController.ApplicationProperties.class));
}

詳細なドキュメントはここにあります: http://springfox.github.io/springfox/docs/snapshot/#q27

5
Michael Lihs