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 строки и правильно вызывал сервис?

0 ответов

Другие вопросы по тегам