Spring-data-rest在hal + json和plain json之间切换

时间:2017-01-16 14:36:18

标签: java spring rest spring-data spring-data-rest

我一直在使用defaultMediaType配置属性设置为“application / json”来获得“普通”JSON,这更容易处理,而且我需要的只是:

{
    "links": [
    ],
    "content": [
        {
            "username": "admin",
            "id": 1,
            "authorities": [
                "ROLE_ADMIN"
            ],
            "content": [ ],
            "links": [
                {
                    "rel": "self",
                    "href": "http://localhost:8080/apiv1/data/users/1"
                },
                {
                    "rel": "logisUser",
                    "href": "http://localhost:8080/apiv1/data/users/1"
                },
                {
                    "rel": "mandant",
                    "href": "http://localhost:8080/apiv1/data/users/1/mandant"
                }
            ]
        },...
    ],
    "page": {
        "size": 20,
        "totalElements": 3,
        "totalPages": 1,
        "number": 0
    }
}

但在整合测试中结果是impossible to use(不能用TestRestTemplate解析,也不能用Traverson等解组)。

使用hal + json可以很好地与Traverson API一起使用。

现在,由于名称是默认 MediaType,Spring Data Rest Reference总是提到“支持的媒体类型”,我希望使用“Accept”标头在两个变体之间切换。但这不起作用(也试过“Content-Type”和两者。使用“application / json和application / hal + json”)。

似乎还有一个属性“useHalAsDefaultJsonMediaType”,但就我所见,它根本没有做任何事情。

所有希望都失去了吗?为什么文档如此令人困惑?有一种方法可以在表示之间切换,这表现得并不像顾名思义。没有记录的方法来反序列化“旧”表示,而新的表示不能与TestRestTemplate一起使用。非常非常令人沮丧。我已经花了很多时间在这上面:(

1 个答案:

答案 0 :(得分:-1)

制作RepositoryRestConfigurer

@Configuration
public class RestRepositoryConfig extends RepositoryRestConfigurerAdapter {
    @Value("${spring.hateoas.use-hal-as-default-json-media-type:true}")
    private boolean useHalAsDefaultJsonMediaType;

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
         config.useHalAsDefaultJsonMediaType(useHalAsDefaultJsonMediaType);
    }
}

并设置

spring.hateoas.use-hal-as-default-json-media-type=false