Я столкнулся со сценарием, в котором пользовательский интерфейсный метод @RepositoryRestResource задействован неверным HTTP-методом.Например:
@RepositoryRestResource(path = "matches", collectionResourceRel = "matches")
public interface MatchRepo extends Neo4jRepository<Match, Long> {
Collection<Match> findAllByCodeName(@Param("codeName") String codeName);
@Transactional
Long deleteAllByCodeName(@Param("codeName") String codeName);
}
Запрос:
curl -i -X GET 'http://localhost:8003/spring-data/api/v1/matches/search/findAllByCodeName?codeName=Test-CodeName-1'
Обратите внимание на приведенный выше GET HTTP-метод.Это ожидается, и я доволен ответом:
HTTP/1.1 200
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 20 Nov 2018 15:32:49 GMT
{
"_embedded" : {
"matches" : [ {
"id" : "1",
"codeName" : "Test-CodeName-1",
"round" : 1,
"me" : "ROCK",
"pc" : "ROCK",
"result" : "D",
"timestamp" : "Nov 20, 2018, 05:32:27 AM",
"lastUpdated" : "Nov 20, 2018, 05:32:27 AM",
"created" : "Nov 20, 2018, 05:32:27 AM",
"_links" : {
"self" : {
"href" : "http://localhost:8003/spring-data/api/v1/matches/22"
},
"match" : {
"href" : "http://localhost:8003/spring-data/api/v1/matches/22"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://localhost:8003/spring-data/api/v1/matches/search/findAllByCodeName?codeName=Test-CodeName-1"
}
}
}%
Это то, что появляется в отображениях консоли Intelli-J:
http://localhost:8003/spring-data/api/v1/{repository}/search
, и я выполнил запрос какуказано в сопоставлениях, как показано ниже.Но проблема становится очевидной, когда я удаляю ресурс с помощью GET HTTP-метода , как показано ниже:
Запрос:
curl -i -X GET 'http://localhost:8003/spring-data/api/v1/matches/search/deleteAllByCodeName?codeName=Test-CodeName-1'
Ответ:
HTTP/1.1 200
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 20 Nov 2018 15:51:33 GMT
{
"10":
}
Мне нужно найти способ сделать мой пользовательский интерфейсный метод deleteAllByCodeName (@Param) из класса MatchRepo для выполнения с правильным HTTP-методом.Необходимо использовать DELETE HTTP-метод, а не GET HTTP-метод и придерживаться принципов проектирования REST-API.