jackson-annotations icon indicating copy to clipboard operation
jackson-annotations copied to clipboard

Use 2 different `@JsonView` in a method (parameter and return)

Open domroydumcn opened this issue 1 year ago • 1 comments

Allow using one view as input and a different view of the same DTO as output to a method. Like this :

@POST
    @Path("/add")
    @JsonView(parameter=ExempleViews.Ajout.class, return=ExempleViews.Response.class)  // <-- like this
    @APIResponse(responseCode = "201", description = "Add with success")
    @APIResponse(responseCode = "400", description = "Bad request")
    @APIResponse(responseCode = "409", description = "Conflict in database")
    @APIResponse(responseCode = "500", description = "Internal error")
    public Uni<Response> add(@Valid @NotNull ExampleDto exampleDto) {

        return exampleService
                .add(exampleDto)
                .map(e -> Response.ok(e).status(Status.CREATED).build());
    }

domroydumcn avatar Oct 22 '24 17:10 domroydumcn

Ok so:

  1. Functionality used via annotations is defined elsewhere (even in case of regular @JsonView, handling provided by jackson-databind, so this request would only be for specific change to @JsonView type (but not to that adding new functionality)
  2. I don't think existing semantics of @JsonView should be changed (confusing to existing users since it would have no meaning for regular view handling). More likely a new annotation should be created; one that could use @JsonView as parameter type for 2 properties
  3. Since handling is not (cannot) be part of any of Jackson core packages, new annotation does not belong here.

In practice I think this would be adding annotation in whatever framework is being used: Spring Boot, Quarkus -- or, if JAX-RS / Jakarta-RS, to

  • https://github.com/FasterXML/jackson-jaxrs-providers/
  • https://github.com/FasterXML/jackson-jakarta-rs-providers/

cowtowncoder avatar Oct 24 '24 16:10 cowtowncoder