diff --git a/src/main/java/com/github/jasminb/jsonapi/ConverterConfiguration.java b/src/main/java/com/github/jasminb/jsonapi/ConverterConfiguration.java index 4aa17d2..1014ddd 100644 --- a/src/main/java/com/github/jasminb/jsonapi/ConverterConfiguration.java +++ b/src/main/java/com/github/jasminb/jsonapi/ConverterConfiguration.java @@ -54,7 +54,9 @@ public ConverterConfiguration(Class... classes) { private void processClass(Class clazz) { if (clazz.isAnnotationPresent(Type.class)) { Type annotation = clazz.getAnnotation(Type.class); - typeToClassMapping.put(annotation.value(), clazz); + for (String typeName : annotation.value()) { + typeToClassMapping.put(typeName, clazz); + } typeAnnotations.put(clazz, annotation); relationshipTypeMap.put(clazz, new HashMap>()); relationshipFieldMap.put(clazz, new HashMap()); @@ -70,8 +72,10 @@ private void processClass(Class clazz) { Relationship relationship = relationshipField.getAnnotation(Relationship.class); Class targetType = ReflectionUtils.getFieldType(relationshipField); - relationshipTypeMap.get(clazz).put(relationship.value(), targetType); - relationshipFieldMap.get(clazz).put(relationship.value(), relationshipField); + for (String relationshipName : relationship.value()) { + relationshipTypeMap.get(clazz).put(relationshipName, targetType); + relationshipFieldMap.get(clazz).put(relationshipName, relationshipField); + } fieldRelationshipMap.put(relationshipField, relationship); if (relationship.resolve() && relationship.relType() == null) { @@ -286,7 +290,7 @@ public String getTypeName(Class clazz) { Type type = typeAnnotations.get(clazz); if (type != null) { - return type.value(); + return type.value()[0]; } return null; } diff --git a/src/main/java/com/github/jasminb/jsonapi/ReflectionUtils.java b/src/main/java/com/github/jasminb/jsonapi/ReflectionUtils.java index 1142bdb..3ad273e 100644 --- a/src/main/java/com/github/jasminb/jsonapi/ReflectionUtils.java +++ b/src/main/java/com/github/jasminb/jsonapi/ReflectionUtils.java @@ -51,7 +51,7 @@ public static List getAnnotatedFields(Class clazz, Classnull in case Type annotation is not present */ - public static String getTypeName(Class clazz) { + public static String[] getTypeNames(Class clazz) { Type typeAnnotation = clazz.getAnnotation(Type.class); return typeAnnotation != null ? typeAnnotation.value() : null; } diff --git a/src/main/java/com/github/jasminb/jsonapi/ResourceConverter.java b/src/main/java/com/github/jasminb/jsonapi/ResourceConverter.java index 484cd3c..e145aae 100644 --- a/src/main/java/com/github/jasminb/jsonapi/ResourceConverter.java +++ b/src/main/java/com/github/jasminb/jsonapi/ResourceConverter.java @@ -130,9 +130,9 @@ public void setGlobalResolver(RelationshipResolver resolver) { */ public void setTypeResolver(RelationshipResolver resolver, Class type) { if (resolver != null) { - String typeName = ReflectionUtils.getTypeName(type); + String[] typeNames = ReflectionUtils.getTypeNames(type); - if (typeName != null) { + if (typeNames != null) { typedResolvers.put(type, resolver); } } @@ -851,7 +851,7 @@ private ObjectNode getDataNode(Object object, Map includedCo continue; } - String relationshipName = relationship.value(); + String relationshipName = relationship.value()[0]; ObjectNode relationshipDataNode = objectMapper.createObjectNode(); relationshipsNode.set(relationshipName, relationshipDataNode); @@ -1183,7 +1183,7 @@ private JsonNode getRelationshipLinks(Object source, Relationship relationship, Links links = null; Field relationshipLinksField = configuration - .getRelationshipLinksField(source.getClass(), relationship.value()); + .getRelationshipLinksField(source.getClass(), relationship.value()[0]); if (relationshipLinksField != null) { links = (Links) relationshipLinksField.get(source); diff --git a/src/main/java/com/github/jasminb/jsonapi/annotations/Relationship.java b/src/main/java/com/github/jasminb/jsonapi/annotations/Relationship.java index 66ab4c6..2b92401 100644 --- a/src/main/java/com/github/jasminb/jsonapi/annotations/Relationship.java +++ b/src/main/java/com/github/jasminb/jsonapi/annotations/Relationship.java @@ -16,7 +16,7 @@ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Relationship { - String value(); + String[] value(); boolean resolve() default false; boolean serialise() default true; boolean serialiseData() default true; diff --git a/src/main/java/com/github/jasminb/jsonapi/annotations/Type.java b/src/main/java/com/github/jasminb/jsonapi/annotations/Type.java index d38da3b..a50eb2d 100644 --- a/src/main/java/com/github/jasminb/jsonapi/annotations/Type.java +++ b/src/main/java/com/github/jasminb/jsonapi/annotations/Type.java @@ -16,8 +16,8 @@ /** * Resource type name. */ - String value(); - + String[] value(); + /** * Resource path, used to generate self link. */ diff --git a/src/test/java/com/github/jasminb/jsonapi/models/Article.java b/src/test/java/com/github/jasminb/jsonapi/models/Article.java index c0aa071..5258b47 100644 --- a/src/test/java/com/github/jasminb/jsonapi/models/Article.java +++ b/src/test/java/com/github/jasminb/jsonapi/models/Article.java @@ -13,7 +13,7 @@ import java.util.Collections; import java.util.List; -@Type("articles") +@Type({"article", "articles"}) @JsonIdentityInfo(generator = ObjectIdGenerators.StringIdGenerator.class, property = "id") public class Article { @Id diff --git a/src/test/java/com/github/jasminb/jsonapi/models/Author.java b/src/test/java/com/github/jasminb/jsonapi/models/Author.java index 688ac1a..3bbaf4a 100644 --- a/src/test/java/com/github/jasminb/jsonapi/models/Author.java +++ b/src/test/java/com/github/jasminb/jsonapi/models/Author.java @@ -18,7 +18,7 @@ public class Author { private String lastName; private String twitter; - @Relationship("articles") + @Relationship({"articles", "article"}) private Collection
articles; public String getId() { diff --git a/src/test/java/com/github/jasminb/jsonapi/models/Comment.java b/src/test/java/com/github/jasminb/jsonapi/models/Comment.java index eaa08f9..90a9172 100644 --- a/src/test/java/com/github/jasminb/jsonapi/models/Comment.java +++ b/src/test/java/com/github/jasminb/jsonapi/models/Comment.java @@ -5,13 +5,13 @@ import com.github.jasminb.jsonapi.annotations.Id; import com.github.jasminb.jsonapi.annotations.Type; -@Type("comments") +@Type({"comments", "comment"}) public class Comment { @Id private String id; private String body; - @Relationship("author") + @Relationship({"author", "authors"}) private Author author; public String getId() { diff --git a/src/test/java/com/github/jasminb/jsonapi/models/inheritance/Engineer.java b/src/test/java/com/github/jasminb/jsonapi/models/inheritance/Engineer.java index 4bc3d6a..0b87a7b 100644 --- a/src/test/java/com/github/jasminb/jsonapi/models/inheritance/Engineer.java +++ b/src/test/java/com/github/jasminb/jsonapi/models/inheritance/Engineer.java @@ -8,7 +8,7 @@ * * @author jbegic */ -@Type("engineer") +@Type({"engineer", "engineers"}) public class Engineer extends Person { @Relationship("field") diff --git a/src/test/resources/articles-with-link-objects.json b/src/test/resources/articles-with-link-objects.json index 4ee514d..ab031c1 100644 --- a/src/test/resources/articles-with-link-objects.json +++ b/src/test/resources/articles-with-link-objects.json @@ -1,6 +1,6 @@ { "data": [{ - "type": "articles", + "type": "article", "id": "1", "attributes": { "title": "JSON API paints my bikeshed!" @@ -48,7 +48,7 @@ "self": "http://example.com/people/9" } }, { - "type": "comments", + "type": "comment", "id": "5", "attributes": { "body": "First!" @@ -62,7 +62,7 @@ "self": "http://example.com/comments/5" } }, { - "type": "comments", + "type": "comment", "id": "12", "attributes": { "body": "I like XML better" diff --git a/src/test/resources/articles.json b/src/test/resources/articles.json index daa4346..ecaae99 100644 --- a/src/test/resources/articles.json +++ b/src/test/resources/articles.json @@ -1,6 +1,6 @@ { "data": [{ - "type": "articles", + "type": "article", "id": "1", "attributes": { "title": "JSON API paints my bikeshed!" diff --git a/src/test/resources/missing-type-inclusion.json b/src/test/resources/missing-type-inclusion.json index 7ec9987..ad4eabe 100644 --- a/src/test/resources/missing-type-inclusion.json +++ b/src/test/resources/missing-type-inclusion.json @@ -1,6 +1,6 @@ { "data": { - "type": "engineer", + "type": "engineers", "id": "id", "attributes": { "firstName": "John",