diff --git a/src/main/java/de/ingogriebsch/spring/hateoas/siren/AbstractSirenSerializer.java b/src/main/java/de/ingogriebsch/spring/hateoas/siren/AbstractSirenSerializer.java index 6cc7cf9a..e239bcca 100644 --- a/src/main/java/de/ingogriebsch/spring/hateoas/siren/AbstractSirenSerializer.java +++ b/src/main/java/de/ingogriebsch/spring/hateoas/siren/AbstractSirenSerializer.java @@ -24,6 +24,7 @@ import com.fasterxml.jackson.databind.jsontype.TypeSerializer; import com.fasterxml.jackson.databind.ser.ContainerSerializer; import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import org.springframework.context.NoSuchMessageException; import org.springframework.hateoas.LinkRelation; import org.springframework.hateoas.RepresentationModel; @@ -91,7 +92,13 @@ protected List rels(RepresentationModel model, SerializerProvid } protected String title(Class type) { - return serializerFacilities.getMessageResolver().resolve(SirenEntity.TitleResolvable.of(type)); + String title; + try { + title = serializerFacilities.getMessageResolver().resolve(SirenEntity.TitleResolvable.of(type)); + } catch (NoSuchMessageException e) { + title = null; + } + return title; } protected Object setAttribute(String key, Object value, SerializerProvider provider) { diff --git a/src/main/java/de/ingogriebsch/spring/hateoas/siren/SirenLinkConverter.java b/src/main/java/de/ingogriebsch/spring/hateoas/siren/SirenLinkConverter.java index fb0f366b..5727e522 100644 --- a/src/main/java/de/ingogriebsch/spring/hateoas/siren/SirenLinkConverter.java +++ b/src/main/java/de/ingogriebsch/spring/hateoas/siren/SirenLinkConverter.java @@ -30,6 +30,8 @@ import de.ingogriebsch.spring.hateoas.siren.SirenAction.Field; import lombok.RequiredArgsConstructor; +import org.springframework.context.MessageSourceResolvable; +import org.springframework.context.NoSuchMessageException; import org.springframework.hateoas.Affordance; import org.springframework.hateoas.AffordanceModel.InputPayloadMetadata; import org.springframework.hateoas.AffordanceModel.PropertyMetadata; @@ -131,17 +133,27 @@ private String title(Link link) { LinkRelation rel = link.getRel(); if (rel != null) { - return messageResolver.resolve(SirenLink.TitleResolvable.of(link.getRel())); + return title(SirenLink.TitleResolvable.of(link.getRel())); } return null; } private String actionTitle(String name) { - return name != null ? messageResolver.resolve(SirenAction.TitleResolvable.of(name)) : null; + return name != null ? title(SirenAction.TitleResolvable.of(name)) : null; } private String fieldTitle(String name) { - return name != null ? messageResolver.resolve(SirenAction.Field.TitleResolvable.of(name)) : null; + return name != null ? title(SirenAction.Field.TitleResolvable.of(name)) : null; + } + + private String title(MessageSourceResolvable resolvable) { + String title; + try { + title = messageResolver.resolve(resolvable); + } catch (NoSuchMessageException e) { + title = null; + } + return title; } private String fieldType(PropertyMetadata propertyMetadata, MediaType actionType) { diff --git a/src/test/resources/rest-messages.properties b/src/test/resources/rest-messages.properties new file mode 100644 index 00000000..27ee706d --- /dev/null +++ b/src/test/resources/rest-messages.properties @@ -0,0 +1 @@ +# Simple trick to ensure that NoSuchMessageException's are catched if a message is not available!