我已经使用springfox 2.0配置了spring项目.我能够用它生成开放的API规范.
"paths": {
"/test/testinfo": {
"post": {
"tags": [
"test-controller"
],
"summary": "getTestInfo",
"operationId": "getTestInfoInfoUsingGET",
"consumes": [
"application/json"
],
"produces": [
"application/json"
]
如您所见,operationId的值格式如下
[java_method_name_here]Using[HTTP_verb_here]
例如getPetsUsingGET
在使用swagger-codegen生成客户端时使用此operationId.
有谁知道如何自定义它?我知道可以使用@ApiOperation针对每个api完成此操作,但是是否有更通用的方法为所有api定义此格式?
解决方法:
您可以create your own plugin做到.这是使用相同的插件技术在springfox中如何执行的an example.
@Component
@Order(YOUR_PLUGIN_ORDER) // > Ordered.HIGHEST_PRECEDENCE + 1000
public class OperationNicknameIntoUniqueIdReader implements OperationBuilderPlugin {
@Override
public void apply(OperationContext context) {
//Create your own transformation to format the name in the way
//that you prefer
String operationNameStem = transformName(context.getName());
//Update the method name stem that is used to generate a unique id
context.operationBuilder().codegenMethodNameStem(operationNameStem);
}
...
}
注意:无论您提出什么主意,springfox都会确保它在所有API中都是唯一的.因此,如果您有重复的命名方法,它将在唯一名称的末尾开始编号方案.例如如果getCustomer不是唯一的,它将生成唯一的ID getCustomer_1等.