Я искал способ сделать API-интерфейсы JAX-RS более удобочитаемыми и использовал метод пользовательских методов Google:
https://cloud.google.com/apis/design/custom_methods
Я искал это, потому что некоторые измои сущности выполняют больше действий, чем я мог выразить с помощью традиционных HTTP-глаголов.Шаблон Google должен использовать двоеточие (:
) в конце URI, отделяя сущность / коллекцию от желаемого действия.
Я пытался применить этот шаблон к простому ресурсу Джерси, просто чтобы проверитькак это можно сделать.У меня есть класс ресурсов StudentDetailsResource
, аннотированный @Path("students/{studentId}")
, и несколько методов, также аннотированных @Path
.
Если у моего метода есть другая сущность до пользовательского метода, то все в порядке.Допустим, метод регистрации помечен @Path("subjects/{subjectId}:enroll")
.
Проблема возникает, когда действие выполняется сразу после URI класса ресурсов, поскольку @Path
использует шаблон URI, который prefixWithSlash
всех подресурсов.Поэтому, если у меня есть метод отсева, аннотация будет выглядеть как @Path(":dropout")
, но шаблон URI станет /students/{studentId}/:dropout
, а this /:
прервется в фазе сопоставления.
Я читал о ДжерсиПоставщики и ResourceDelegates, но я не смог найти способ заменить действие шаблона URI по умолчанию prefixWithSlash
.
Вопрос: как применить подход пользовательского метода Google или как избежать использования по умолчанию prefixWithSlash
поведение с Джерси?
Примечание: я знаю, что это глупый пример, и есть другие способы решения этого конкретного случая, но у меня есть более сложные случаи, которые могут извлечь выгоду из пользовательских методов.