Comment From: Rakesh151994
Please check the below code with spring-boot version as 3.1.5
We have a pojo which is declared with a jsonfilter as @JsonFilter("min")
@JsonFilter("min")
public class Satellite {
private int id;
private String name;
private LocalDate launchDate;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public LocalDate getLaunchDate() {
return launchDate;
}
public void setLaunchDate(LocalDate launchDate) {
this.launchDate = launchDate;
}
}
Now, we have a URI mapped in the controller as below
public class ApiController {
@GetMapping("/dfilter")
public MappingJacksonValue dfilter() {
Satellite s = new Satellite();
s.setId(12);
s.setName("Tri");
s.setLaunchDate(java.time.LocalDate.now());
MappingJacksonValue v = new MappingJacksonValue(s);
SimpleBeanPropertyFilter fil = SimpleBeanPropertyFilter.filterOutAllExcept("launchDate");
FilterProvider fp = new SimpleFilterProvider().addFilter("min", fil);
v.setFilters(fp);
return v;
}
@GetMapping("/link") //Using Hateoas trying to link the above method wit URI "/dfilter"
public EntityModel<Satellite> test() {
Satellite s =new Satellite();
s.setId(12);s.setName("jki");s.setLaunchDate(LocalDate.now());
EntityModel<Satellite> mod=EntityModel.of(s);
WebMvcLinkBuilder m= WebMvcLinkBuilder.linkTo(WebMvcLinkBuilder.methodOn(this.getClass()).dfilter());
mod.add(m.withRel("kl"));return mod;
}
}
This approach causes the exception as below. It works normally with other URIs except this one where we have the filtering with @JsonFilter.
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot resolve PropertyFilter with id 'min'; no FilterProvider configured (through reference chain: org.springframework.hateoas.EntityModel["content"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.15.3.jar:2.15.3]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1308) ~[jackson-databind-2.15.3.jar:2.15.3]
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:414) ~[jackson-databind-2.15.3.jar:2.15.3]
at com.fasterxml.jackson.databind.ser.std.StdSerializer.findPropertyFilter(StdSerializer.java:433) ~[jackson-databind-2.15.3.jar:2.15.3]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFieldsFiltered(BeanSerializerBase.java:812) ~[jackson-databind-2.15.3.jar:2.15.3]
at com.fasterxml.jackson.databind.ser.impl.UnwrappingBeanSerializer.serialize(UnwrappingBeanSerializer.java:136) ~[jackson-databind-2.15.3.jar:2.15.3]
at org.springframework.hateoas.EntityModel$MapSuppressingUnwrappingSerializer.serialize(EntityModel.java:246) ~[spring-hateoas-2.1.2.jar:2.1.2]
at com.fasterxml.jackson.databind.ser.impl.UnwrappingBeanPropertyWriter.serializeAsField(UnwrappingBeanPropertyWriter.java:127) ~[jackson-databind-2.15.3.jar:2.15.3]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:772) ~[jackson-databind-2.15.3.jar:2.15.3]
Comment From: wilkinsona
Spring HATEAOS is managed as a separate project. If you believe you've found a bug with Spring HATEOAS, please open a Spring HATEOAS issue. Alternatively, if you're looking for some guidance, please ask on Stack Overflow.