Open
Description
Bug Report Checklist
- Have you provided a full/minimal spec to reproduce the issue?
- Have you validated the input using an OpenAPI validator (example)?
- Have you tested with the latest master to confirm the issue still exists?
- Have you searched for related issues/PRs?
- What's the actual output vs expected output?
- [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description
Essentially, I have one endpoint to fetch user data (see below). What I'm attempting to achieve is to make phoneNumber optional, or set it as nullable: true
. Therefore, I have two options:
- Omit mentioning that field in the required section.
- Use
nullable: true
at the field level.
In addition, I have a method that converts a UserDTO
(database object) to a RestUser
(generated model). Take a look at this method:
public static RestUser toRestUser(UserDTO userDTO) {
return new RestUser()
.id(userDTO.getId())
.name(userDTO.getName())
.phoneNumber(userDTO.getPhoneNumber())
.email(userDTO.getEmailAddress());
}
- If I don't specify that field as required in Swagger, the generator will create that field with Optional.of. At that point, if my value is null, it will throw a
NullPointerException
. In my opinion, we should useOptional.ofNullable
for non-required fields. - If I use
nullable: true
on the field, I get a completely different value. If I pass a value to a nullable field, I receive this below result.
Actual output
However, this is incorrect why getting "present": true
; the corrected value should be null if i didn't pass the value.
{
"id": 1,
"name": "John",
"phoneNumber": {
"present": true
},
"mail": "test@gmail.com"
}
Expected output
{
"id": 1,
"name": "John",
"phoneNumber": null,
"mail": "test@gmail.com"
}
openapi-generator version
7.2.0
OpenAPI declaration file content or url
openapi: 3.0.3
info:
title: Backend
version: 1.0.0
paths:
/users:
get:
tags:
- user
summary: get.users
description: get all users.
responses:
200:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/User'
components:
schemas:
User:
type: object
properties:
id:
type: integer
name:
type: string
phoneNumber:
type: integer
format: int64
nullable: true
email:
type: string