У меня есть конечные точки API JAX-RS, определенные в классе.У меня есть методы в классе, такие как
@GET
@Path("{param1}/{param2}/mypath")
@Consumes({ MediaType.APPLICATION_XML, MediaType.TEXT_XML,
MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.TEXT_XML,
MediaType.APPLICATION_JSON })
public Response getSomeResource(@PathParam("param1") MyClass1 myclass1,
@PathParam("param2") MyClass2 myclass2 )
{
//business logic goes here
}
Теперь, согласно документации по - https://docs.oracle.com/cd/E19776-01/820-4867/6nga7f5n6/index.html, @QueryParam и @PathParam можно использовать только на следующих типах Java:
All primitive types except char
All wrapper classes of primitive types except Character
Have a constructor that accepts a single String argument
Any class with the static method named valueOf(String) that accepts
a single String argument
Any class with a constructor that takes a single String as a
parameter
List<T>, Set<T>, or SortedSet<T>, where T matches the already listed
criteria. Sometimes parameters may contain more than one value for
the same name. If this is the case, these types may be used to
obtain all values.
В кодовой базе MyClass1
и MyClass2
не следуют ни одному из вышеперечисленных, но на PROD все отлично работает.Но когда я попытался протестировать тот же метод с платформой Jersey Test, Джерси дает мне исключение при запуске:
org.glassfish.jersey.server.model.ModelValidationException: Validation of
the application resource model has failed during application initialization.
[[FATAL] No injection source found for a parameter of type public
javax.ws.rs.core.Response
При дальнейшем копании я обнаружил, что для моих привязок @PathParams/@QueryParams
для * 1015 требовались вышеуказанные условия* и MyClass2
.Я предоставил открытый конструктор с одним аргументом String для MyClass1
, и проблема частично исчезла.Я пытался сделать то же самое с MyClass2
, но проблема не исчезла.MyClass2
- это статический внутренний класс, который также имеет родительский класс .Итак, вот мои вопросы:
- Как это работает нормально на PROD, но жалуется на тест JUnit?
- Есть ли какие-то особые соображения, которые необходимо учитывать для статических внутренних классов, которые будут использоваться дляпереплет
@PathParams/@QueryParams
?Я дал открытый конструктор с единственным аргументом String статическому внутреннему классу, но проблема все еще сохранялась, в то время как для другого класса (MyClass1
) это работало.Есть что-то, чего мне не хватает?
Спасибо!