Я использую Apache CXF в качестве реализации JAX-RS, и у меня проблема с необязательными «параметрами объекта». Взгляните на этот фрагмент кода:
@Path("/")
public class myClass {
@PUT
@Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
@Consumes(MediaType.APPLICATION_XML)
Response updateStuff(
@PathParam("p1") String p1,
@PathParam("p2") Long p2,
@PathParam("p3") String p3,
@PathParam("p4") Long p4,
MyEntity entity);
}
Если сущность не нулевая, все работает нормально.
Однако я хочу обрабатывать запросы с пустым телом. Я ожидал бы, что в таком случае сущность будет нулевой. Но это неправда. Кажется, что CXF не может найти мой метод, если тело имеет значение null. В журналах я могу найти предупреждение о пустом теле сообщения (от AbstractJAXBProvider) и все.
Я также попытался перегрузить метод updateStuff:
@Path("/")
public class myClass {
@PUT
@Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
@Consumes(MediaType.APPLICATION_XML)
Response updateStuff(
@PathParam("p1") String p1,
@PathParam("p2") Long p2,
@PathParam("p3") String p3,
@PathParam("p4") Long p4,
MyEntity entity);
@PUT
@Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
Response updateStuff(
@PathParam("p1") String p1,
@PathParam("p2") Long p2,
@PathParam("p3") String p3,
@PathParam("p4") Long p4);
}
Но это тоже не сработало.
У вас есть идеи, как обрабатывать нулевые параметры?