Skip to content

Is it possible to support Optional<string> #133

@CRC32EX

Description

@CRC32EX

Server code

// DB Model
class User
{
  public uint Id { get; set; }
  public string? StatusMessage { get; set; } // nullable
}

// HTTP Model
[TranspilationSource]
class UpdateUserRequest 
{
  public int UserId { get; set; }
  [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
  public Optional<string?> StatusMessage { get; set; }
}

// Controller
[HttpPatch]
public IActionResult UpdateUser(UpdateUserRequest request)
{
  var user = DB.FindUserById(request.UserId);

  // if status_message is provided, update it
  if (request.StatusMessage.HasValue) {
    user.StatusMessage = request.StatusMessage;
    DB.Update(user);
  }

  // if (request.Prefecture.HasValue) { /* ... */ }
  // if (request.FirstName.HasValue) { /* ... */ }
  // if (request.LastName.HasValue) { /* ... */ }
  // if (request.BirthDay.HasValue) { /* ... */ }
  // ...
}

HTTP Request example

PATCH /api/user HTTP/1.1
Content-Type: application/json

{ "user_id": 1, "status_message": "I'm fine" }

I want to know JSON string parameter is null or undefined.
For example,

Request Update DB?
{ "user_id": 1, "status_message": "I'm fine" } Yes. Value is I'm fine
{ "user_id": 1, "status_message": "" } Yes. Value is ``
{ "user_id": 1, "status_message": null } Yes. Value is null
{ "user_id": 1 } No.

But, Tapper is not supported it.
Could you support it?
Or, do you have some other good ideas?

Ref:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions