We'd like to add custom attributes to HalFormsProperty. This seems allowed by HAL-FORMS specification but it seems currently impossible with Spring HATEAOS.
IMO, the best extension point would be somewhere here:
|
return model.createProperties((payload, metadata) -> { |
|
|
|
String inputType = metadata.getInputType(); |
|
HalFormsOptions options = optionsFactory.getOptions(payload, metadata); |
|
|
|
HalFormsProperty property = new HalFormsProperty() |
|
.withName(metadata.getName()) |
|
.withRequired(metadata.isRequired()) // |
|
.withReadOnly(metadata.isReadOnly()) |
|
.withMin(metadata.getMin()) |
|
.withMax(metadata.getMax()) |
|
.withMinLength(metadata.getMinLength()) |
|
.withMaxLength(metadata.getMaxLength()) |
|
.withRegex(lookupRegex(metadata)) // |
|
.withType(inputType) // |
|
.withValue(options != null ? options.getSelectedValue() : null) // |
|
.withOptions(options); |
|
|
|
Function<String, I18nedPropertyMetadata> factory = I18nedPropertyMetadata.factory(payload, property); |
|
|
|
return Optional.of(property) |
|
.map(it -> i18n(it, factory.apply("_placeholder"), it::withPlaceholder)) |
|
.map(it -> i18n(it, factory.apply("_prompt"), it::withPrompt)) |
|
.map(it -> model.hasHttpMethod(HttpMethod.PATCH) ? it.withRequired(false) : it) |
|
.orElse(property); |
|
}); |
I guess that would mean adding a free Map to HalFormsProperty and a PropertyCustomizer SPI looking like this:
interface PropertyCustomizer {
HalFormsProperty customize(HalFormsProperty property, InputPayloadMetadata payload, PropertyMetadata metadata, PropertyCreationContext context);
}
We'd like to add custom attributes to
HalFormsProperty. This seems allowed by HAL-FORMS specification but it seems currently impossible with Spring HATEAOS.IMO, the best extension point would be somewhere here:
spring-hateoas/src/main/java/org/springframework/hateoas/mediatype/hal/forms/HalFormsPropertyFactory.java
Lines 83 to 108 in 3a9d0ba
I guess that would mean adding a free Map to
HalFormsPropertyand aPropertyCustomizerSPI looking like this: