On Tue, Jul 5, 2022 at 11:34 AM João Cabrita <[email protected]> wrote:
>
> Hi,
>
> I've been working on a module to integrate Bean Validation with Jackson: 
> https://github.com/kewne/jackson-validation
>
> The basic ideas are:
> 1. Without integrating validation into `@JsonCreator` calls, you can't then 
> enforce invariants in class instances, e.g. this.name = 
> Objects.requireNonNull(name);
> with validation support, you can annotate params with @NotNull.
> 2. Bean Validation inspects the class and knows nothing about Jackson, so it 
> generates paths using the Java definition;
> with this module , you would be able to declare @JsonProperty("abc") String 
> name and get violation paths with the correct names (instead of "name").
>
> My approach so far has been to create my own value instantiator and perform 
> validations before and after instantiation, but this fails because, if an 
> object deep in the tree fails its validation, I don't know how to catch it so 
> it shows up properly in violations tree:
>
> class Root {
>   private Nested nested;
> }
>
> class Nested {
>   @NotNull private String name;
> }
>
> ObjectMapper.readValue("""
> {
>   "nested": {}
> }
> """, Root.class); //throws validation exception with Nested as root...
>
> Any hints on how I might handle the nesting?
>
> Thanks!

It seems to me that the options really come down to 2 approaches for
combining Jackson and Bean Validation API:

1. Run them separately: Jackson binds data first, Validator then
validates the result. Less integrated so error messages do not tie
back to input offsets.
2. Implement custom version of Bean Validation API Validator that
somehow integrates into Jackson's handling

So far I have assumed that (1) is a reasonable path as although in
theory (2) could provide more meaningful information, the effort to
make that actually work well seems very high.
At least for the general case. Perhaps it would be more practical if
it's ok to modify POJOs to participate in the validation process.

As to nesting, the problem really is that your POJOs will not get any
chance to participate in traversal, or have access to context.

So unfortunately I can't think of much to help you here. But maybe others do.

Good luck!

-+ Tatu +-

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jackson-user/CAL4a10jCNsUNaWAw3n8skGdQM%2Bd%2BarfsmeEyPqEuaMswY79KEg%40mail.gmail.com.

Reply via email to