Как конвертировать Mono <String>в Mono <MyObject>? - PullRequest
0 голосов
/ 05 февраля 2019

Я пишу простой метод get для получения отзывов из URL API.API возвращает данные json как String.Возвращение Mono<Object> выдает ошибку.Ниже приведен HTTP-ответ.

{
    "timestamp": "2019-02-05T11:25:33.510+0000",
    "path": "Some URL",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Content type 'text/plain;charset=utf-8' not supported for bodyType=java.lang.Object"
}

Я обнаружил, что ответ является строкой.Так что возвращение Mono<String> работает нормально.Но я хочу вернуть Mono<MyObject> из ответа API.

Как мне преобразовать Mono<String> в Mono<MyObject>?Я не смог найти никаких решений в Google, кроме Как получить строку из Mono в реактивной Java .

Ниже приведен мой класс обслуживания:

@Service
public class DealerRaterService {
    WebClient client = WebClient.create();
    String reviewBaseUrl = "Some URL";

    public Mono<Object> getReviews(String pageId, String accessToken) {
        String reviewUrl = reviewBaseUrl + pageId + "?accessToken=" + accessToken;
        return client.get().uri(reviewUrl).retrieve().bodyToMono(Object.class);
    }
}

Редактировать: Добавление класса моего контроллера:

@RestController
@RequestMapping("/path1")
public class DealerRaterController {

    @Autowired
    DealerRaterService service;

    @RequestMapping("/path2")
    public Mono<Object> fetchReview(@RequestParam("pageid") String pageId,
            @RequestParam("accesstoken") String accessToken) throws ParseException {
        return service.getReviews(pageId, accessToken);
    }
}

Дайте мне знать, что вам нужна дополнительная информация.

1 Ответ

0 голосов
/ 08 февраля 2019

Так я исправил свою проблему.Использовал map для извлечения строки и ее преобразования в мой класс POJO с использованием класса ObjectMapper.

@Service
public class DealerRaterService {
    WebClient client = WebClient.create();
    String reviewBaseUrl = "some url";

    public Mono<DealerReview> getReviews(String pageId, String accessToken)
            throws JsonParseException, JsonMappingException, IOException {
        String reviewUrl = reviewBaseUrl + pageId + "?accessToken=" + accessToken;
        Mono<String> MonoOfDR = client.get().uri(reviewUrl).retrieve().bodyToMono(String.class);

        return MonoOfDR.map(dealerRater -> {
            try {
                DealerReview object = new ObjectMapper().readValue(dealerRater, DealerReview.class);
                return object;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        });

    }

}
...