Несовместимые типы: переменная вывода V имеет несовместимые границы (SSE/Jackson)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Несовместимые типы: переменная вывода V имеет несовместимые границы (SSE/Jackson)

Сообщение Anonymous »

Поскольку MappingJacksonValue устарел в весенней загрузке 4/Jackson 3, я пытаюсь выяснить, как сериализовать мои объекты на основе JsonView.

У меня есть следующая конечная точка SSE:

Код: Выделить всё

   @GetMapping(path = "/api/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
@PreAuthAnonymous // Subscribing to the flux is open to all, what passes through the flux is ruled by dedicated access control
public Flux sse(@RequestParam(required = false) List requiredFluxes) {
List actuallyRequiredFluxes = requiredFluxes == null ? emptyList() : requiredFluxes;
var targetJsonView = authentication().map(security::getRoles).map(IuswRole::computeViewFromUserRoles).orElse(DEFAULT_JSON_VIEW);

return Flux.merge( //
fluxes.stream().flatMap(SseFluxMethod::getFluxMethods) //
.filter(this::isAllowed) //
.filter(fluxMethod -> this.isRequiredByClient(fluxMethod, actuallyRequiredFluxes)) //
.map(SseFluxMethod::invoke) //
.toList() //
) //
.takeUntilOther(shutDown.asFlux()) //
.map(data -> SseFluxUtils.toSseEvent(data, targetJsonView));
}
И у меня есть следующая утилита для сериализации моего объекта на основе JsonView. (Раньше использовалось MappingJacksonValue, я использовал JsonMapper, но, возможно, есть лучший способ):

Код: Выделить всё

public final class SseFluxUtils {

private SseFluxUtils() {
}

public static  ServerSentEvent toSseEvent(T data) {
return toSseEvent(data, Object.class);
}

public static  ServerSentEvent toSseEvent(T data, @NonNull Class jsonView) {
ObjectMapper o = JsonMapper.builder().configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true).build();
var json = o.writerWithView(jsonView).writeValueAsString(data);

return ServerSentEvent.builder().event(data.getClass().getSimpleName()).data(json).build();
}
}
Я не знаю почему, но во время компиляции получаю следующую ошибку.

Код: Выделить всё

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] SseFluxController.java:[76,21] incompatible types: inference variable V has incompatible bounds
equality constraints: org.springframework.http.codec.ServerSentEvent
lower bounds: org.springframework.http.codec.ServerSentEvent
[INFO] 1 error
[INFO] -------------------------------------------------------------
Строка 76 относится к:

Код: Выделить всё

.map(data -> SseFluxUtils.toSseEvent(data, targetJsonView));
Я не совсем понимаю, поскольку код кажется набран правильно.

Спасибо за помощь!


Подробнее здесь: https://stackoverflow.com/questions/798 ... se-jackson
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»