Ich bin nicht sicher, wie der Weg 1,2,3
.
Wenn Sie darauf bestehen,
private Response get(List<MyObject> params) {
}
@GET
@Path("/{params}")
public Response get(@PathParam("params") String params) {
return get(Stream.of(params.split(","))
.map(MyObject::new)
.collect(Collectors.toList()));
}
Wenn Sie wirklich darauf bestehen,
Anmerkung,
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
public @interface MyObjectsParam {
}
Konverter,
public class MyObjectsParamDateConverter
implements ParamConverter<List<MyObject>> {
@Override
public List<MyObject> fromString(final String value) {
return Stream.of(params.split(","))
.map(MyObject::new)
.collect(Collectors.toList())
}
@Override
public String toString(final List<MyObject> value) {
return value.stream()
.map(o -> o.getValue())
.map(Object::toString)
.collect(Collectors.joining(","));
}
}
Anbieter,
@Provider
public class MyObjectsParamConverterProvider
extends ParamConverterProvider {
@Override
@SuppressWarnings("unchecked")
default ParamConverter getConverter(final Class<S> rawType,
final Type genericType,
final Annotation[] annotations) {
for (final Annotation annotation : annotations) {
if (MyObjectsParam.class.isInstance(annotation)) {
return new MyObjectsParamDateConverter();
}
}
return null;
}
}
Jetzt können Sie es so verwenden.
@GET
@Path("/{params}") // still '1,2,3'
public Response get(
@PathParam("params")
@MyObjectsParam // IN ACTION!!!
List<MyObject> params) {
}
Ihr Link ist kaputt. Könnten Sie einfach den Namen des Musters sagen oder es stattdessen erklären? – gla3dr
Hallo gla3dr, thx für die Antwort. Es ist kein echter Link, es ist nur ein Beispiel für URI, das auf die Ressource zugreifen kann. In der Tat, ich möchte Kommas für mehrere Werte im Pfad verwenden (ich bearbeite meinen Beitrag) – Guillaume
Oh, ich verstehe. Ich habe falsch verstanden, was du meintest, mein Schlechter! Die Art, wie Sie es jetzt haben, ist viel klarer. – gla3dr