POST-запрос с использованием Spring RestTemplate с телом XML в качестве String
Мне нужно сделать перерыв, чтобы поделиться сообщением в Linkedin, и для этого я использую модуль Spring Social Linkedin. К сожалению, я не могу просто использовать
org.springframework.social.linkedin.api.NetworkUpdateOperations.share(NewShare share)
метод, я работаю над проектом, который предоставляет необработанный шаблон отдыха для пользователей, и пользователи могут сделать любой вызов rest на любой URL, используя его. Я использую модуль Linkedin от Spring Social только для аутентификации (и он работает как надо).
Итак, я предоставляю пользователям шаблон остальных за модулем Linkedin Spring Social Linkedin. И они должны иметь возможность публиковать общий ресурс в Linkedin с указанным URL и данными во время выполнения. Тело запроса должно содержать что-то вроде этого (взято отсюда):
<share>
<comment>Check out the LinkedIn Share API!</comment>
<content>
<title>LinkedIn Developers Documentation On Using the Share API</title>
<description>Leverage the Share API to maximize engagement on user-generated content on LinkedIn</description>
<submitted-url>https://developer.linkedin.com/documents/share-api</submitted-url>
<submitted-image-url>http://m3.licdn.com/media/p/3/000/124/1a6/089a29a.png</submitted-image-url>
</content>
<visibility>
<code>anyone</code>
</visibility>
</share>
Чтобы поделиться, я создаю строку с этим XML и использую команду postForObject
, Как это:
String toShare = "<share><comment>Check out..." // the string of xml
Object result = linkedinRestTemplate.postForObject("https://api.linkedin.com/v1/people/~/shares", toShare, Object.class);
Но этот вызов не удается с ответом 400 Bad Request. Кажется, что шаблон отдыха обрабатывает эту строку XML, а не как объект, поэтому он не сериализуется и не помещается в тело запроса должным образом.
Spring Social Linkedin делает то же самое, но только с разницей: у него есть сериализуемый класс, называемый NewShare
которые имеют такую же структуру этого XML. Но когда экземпляр NewShare передается как тело запроса, он успешен. Как это:
NewShare share = new NewShare();
share.set... // set its properties, sub-classes, content etc.
Object result = linkedinRestTemplate.postForObject("https://api.linkedin.com/v1/people/~/shares", newShare, Object.class);
Этот звонок успешен.
Но я не могу десериализовать мою строку в NewShare, потому что я предоставляю API, поэтому я предполагаю, что у меня нет абсолютно никакой информации о теле запроса.
Итак, как мне сделать так, чтобы Spring правильно обрабатывал тело xml строки и правильно вызывал сервис?