Параметры @ QueryParam / @ PathParam в методе @GET работают, несмотря на НЕ соблюдение правил JAX-RS. - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть конечные точки 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 - это статический внутренний класс, который также имеет родительский класс .Итак, вот мои вопросы:

  1. Как это работает нормально на PROD, но жалуется на тест JUnit?
  2. Есть ли какие-то особые соображения, которые необходимо учитывать для статических внутренних классов, которые будут использоваться дляпереплет @PathParams/@QueryParams?Я дал открытый конструктор с единственным аргументом String статическому внутреннему классу, но проблема все еще сохранялась, в то время как для другого класса (MyClass1) это работало.Есть что-то, чего мне не хватает?

Спасибо!

...