-
Notifications
You must be signed in to change notification settings - Fork 6k
Open
Milestone
Description
Description
If the swagger declaration contains properties with names containing only uppercase letters and underscores, the generated java code is not java bean conform. As a result jackson maps the properties twice. This actually is part of #4051 but the code currently handles this case earlier.
Swagger-codegen version
Tested with 2.2.1 and 2.2.2-SNAPSHOT
Swagger declaration file content or url
swagger: '2.0'
schemes:
- http
basePath: '/v0.1/foo'
consumes:
- 'application/json'
produces:
- 'application/json'
paths:
'/foo':
get:
responses:
200:
description: "successful operation"
schema:
type: "array"
items:
$ref: "#/definitions/Pet"
definitions:
Pet:
description: >
Pet
type: object
properties:
ATT_NAME:
description: >
Name of the pet
type: stringCommand line used for generation
swagger-codegen-maven-plugin
Steps to reproduce
Build a jaxrs or spring server. Implement controller to return Pet array.
Or use jackson mapper and serialize with the generated Pet model code.
Related issues
Suggest a Fix
AbstractJavaCodegen
@Override
public String toVarName(String name) {
// sanitize name
name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
if ("class".equals(name.toLowerCase())) {
return "propertyClass";
}
if("_".equals(name)) {
name = "_u";
}
// if it's all uppper case, do nothing
// if (name.matches("^[A-Z_]*$")) {
// return name;
// }
// camelize (lower first character) the variable name
// pet_id => petId
name = camelize(name, true);
// for reserved word or word starting with number, append _
if (isReservedWord(name) || name.matches("^\\d.*")) {
name = escapeReservedWord(name);
}
return name;
}