Skip to content

Commit c786d97

Browse files
committed
[spring-projects#1300] Fix jackson serialization test
1 parent fd132c9 commit c786d97

File tree

6 files changed

+57
-4
lines changed

6 files changed

+57
-4
lines changed

src/main/java/org/springframework/hateoas/mediatype/JacksonHelper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.springframework.hateoas.mediatype;
1717

18+
import org.springframework.hateoas.AbstractCollectionModel;
1819
import org.springframework.hateoas.CollectionModel;
1920
import org.springframework.hateoas.EntityModel;
2021

@@ -49,7 +50,7 @@ public static JavaType findRootType(JavaType contentType) {
4950
public static boolean isResourcesOfResource(JavaType type) {
5051

5152
return
52-
CollectionModel.class.isAssignableFrom(type.getRawClass())
53+
AbstractCollectionModel.class.isAssignableFrom(type.getRawClass())
5354
&&
5455
EntityModel.class.isAssignableFrom(type.containedType(0).getRawClass());
5556
}

src/main/java/org/springframework/hateoas/mediatype/collectionjson/Jackson2CollectionJsonModule.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,7 @@ static class CollectionJsonPagedResourcesSerializer extends ContainerSerializer<
461461
}
462462

463463
CollectionJsonPagedResourcesSerializer(@Nullable BeanProperty property) {
464-
465-
super(CollectionModel.class, false);
464+
super(PagedModel.class, false);
466465
this.property = property;
467466
}
468467

src/main/java/org/springframework/hateoas/mediatype/hal/CollectionModelMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
2828

2929
/**
30-
* Custom mixin to to render collection content as {@literal _embedded}.
30+
* Custom mixin to render collection content as {@literal _embedded}.
3131
*
3232
* @author Alexander Baetz
3333
* @author Oliver Gierke

src/main/java/org/springframework/hateoas/mediatype/hal/Jackson2HalModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.springframework.hateoas.Link;
3838
import org.springframework.hateoas.LinkRelation;
3939
import org.springframework.hateoas.Links;
40+
import org.springframework.hateoas.PagedModel;
4041
import org.springframework.hateoas.RepresentationModel;
4142
import org.springframework.hateoas.mediatype.MessageResolver;
4243
import org.springframework.hateoas.mediatype.hal.HalConfiguration.RenderSingleLinks;
@@ -91,6 +92,7 @@ public Jackson2HalModule() {
9192
setMixInAnnotation(Link.class, LinkMixin.class);
9293
setMixInAnnotation(RepresentationModel.class, RepresentationModelMixin.class);
9394
setMixInAnnotation(CollectionModel.class, CollectionModelMixin.class);
95+
setMixInAnnotation(PagedModel.class, PagedModelMixin.class);
9496
}
9597

9698
/**
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright 2012-2020 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.springframework.hateoas.mediatype.hal;
17+
18+
import java.util.Collection;
19+
20+
import org.springframework.hateoas.PagedModel;
21+
22+
import com.fasterxml.jackson.annotation.JsonInclude;
23+
import com.fasterxml.jackson.annotation.JsonInclude.Include;
24+
import com.fasterxml.jackson.annotation.JsonProperty;
25+
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
26+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
27+
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
28+
29+
30+
/**
31+
* Custom mixin to render collection content under {@literal _embedded} element.
32+
*
33+
* @author Patrick ALLAIN
34+
*/
35+
@JsonPropertyOrder({ "content", "links" })
36+
abstract class PagedModelMixin<T> extends PagedModel<T> {
37+
38+
@Override
39+
@JsonProperty("_embedded")
40+
@JsonInclude(Include.NON_EMPTY)
41+
@JsonSerialize(using = Jackson2HalModule.HalResourcesSerializer.class)
42+
@JsonDeserialize(using = Jackson2HalModule.HalResourcesDeserializer.class)
43+
public abstract Collection<T> getContent();
44+
}

src/main/java/org/springframework/hateoas/mediatype/hal/forms/Jackson2HalFormsModule.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,15 @@ abstract class CollectionModelMixin<T> extends CollectionModel<T> {
110110
public abstract Collection<T> getContent();
111111
}
112112

113+
@JsonSerialize(using = HalFormsCollectionModelSerializer.class)
113114
abstract class PagedModelMixin<T> extends PagedModel<T> {
114115

116+
@Override
117+
@JsonProperty("_embedded")
118+
@JsonInclude(Include.NON_EMPTY)
119+
@JsonDeserialize(using = HalFormsCollectionModelDeserializer.class)
120+
public abstract Collection<T> getContent();
121+
115122
@Nullable
116123
@Override
117124
@JsonProperty("page")

0 commit comments

Comments
 (0)