Я использовал версию 2.0.3.RELEASE из spring-social-facebook и Facebook app api v2.8. Я позвонил в Facebook, но вернул это сообщение. "(# 12) bio field устарел для версий v2.8 и выше" Как я могу это исправить?Сообщение об ошибке (# 12) bio field устарело для версий v2.8 и выше
ответ
У меня такая же ошибка, 2.0.3.RELEASE spring-social-facebook, похоже, несовместим с версией Facebook API версии v2.8 (выпущен вчера). Чтение из журнала изменений в facebook для v2.8 (https://developers.facebook.com/docs/apps/changelog):
User Bios - Биополе объекта User больше не доступно. Если для поля было установлено поле bio, значение теперь будет добавлено в поле about.
Думаю, нам нужно подождать нового выпуска библиотеки spring-social-facebook. В выпуске 2.0.3 (в интерфейсе org.springframework.social.facebook.api.UserOperations) есть поле bio в константе PROFILE_FIELDS и оно не поддерживается в версии API v2.8 facebook.
UPDATE: Я нашел обходной путь, в моем случае:
ДО:
Connection<Facebook> connection = facebookConnectionFactory.createConnection(accessGrant);
Facebook facebook = connection.getApi();
User userProfile = facebook.userOperations().getUserProfile();//raises the exception caused by the "bio" field.
ПОСЛЕ
Connection<Facebook> connection = facebookConnectionFactory.createConnection(accessGrant);
Facebook facebook = connection.getApi();
String [] fields = { "id", "email", "first_name", "last_name" };
User userProfile = facebook.fetchObject("me", User.class, fields);
Вот полный список поля можно использовать:
{ "id", "about", "age_range", "birthday", "context", "cover", "currency", "devices", "education", "email", "favorite_athletes", "favorite_teams", "first_name", "gender", "hometown", "inspirational_people", "installed", "install_type", "is_verified", "languages", "last_name", "link", "locale", "location", "meeting_for", "middle_name", "name", "name_format", "political", "quotes", "payment_pricepoints", "relationship_status", "religion", "security_settings", "significant_other", "sports", "test_group", "timezone", "third_party_id", "updated_time", "verified", "video_upload_limits", "viewer_can_send_gift", "website", "work"}
Это работает. Большой ! – Abhishek
Я получаю следующую ошибку выше, любые предложения? {"errors": ["com.fasterxml.jackson.databind.JsonMappingException", "Невозможно создать экземпляр org.springframework.social.connect.UserProfile: не найдено подходящего конструктора, не может десериализоваться из значения Object (отсутствующий конструктор по умолчанию или создатель или, возможно, нужно добавить/включить информацию о типе?) \ n в [Источник: [email protected]; строка: 1, column: 2] "]} –
Это решение является отличной заменой для' facebook.userOperations() .getUserProfile() 'без каких-либо параметров. Но как сделать то же самое, когда мы хотим получить пользовательский объект для другого идентификатора профиля? Например, как сделать то же самое для 'facebook.userOperations(). GetUserProfile (" some_facebook_id_here ")' – iamharish15
Обходное решение для JHipster. Добавьте следующий фрагмент в свой класс SocialService
, пока не будет зафиксировано значение spring-social-facebook
.
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import javax.annotation.PostConstruct;
@PostConstruct
private void init() {
try {
String[] fieldsToMap = { "id", "about", "age_range", "birthday",
"context", "cover", "currency", "devices", "education",
"email", "favorite_athletes", "favorite_teams",
"first_name", "gender", "hometown", "inspirational_people",
"installed", "install_type", "is_verified", "languages",
"last_name", "link", "locale", "location", "meeting_for",
"middle_name", "name", "name_format", "political",
"quotes", "payment_pricepoints", "relationship_status",
"religion", "security_settings", "significant_other",
"sports", "test_group", "timezone", "third_party_id",
"updated_time", "verified", "viewer_can_send_gift",
"website", "work" };
Field field = Class.forName(
"org.springframework.social.facebook.api.UserOperations")
.getDeclaredField("PROFILE_FIELDS");
field.setAccessible(true);
Field modifiers = field.getClass().getDeclaredField("modifiers");
modifiers.setAccessible(true);
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, fieldsToMap);
} catch (Exception ex) {
ex.printStackTrace();
}
}
Источник: https://github.com/jhipster/generator-jhipster/issues/2349 - минус bio
в fieldsToMap
массиве.
package hello;
import org.springframework.social.connect.ConnectionRepository;
import org.springframework.social.facebook.api.Facebook;
import org.springframework.social.facebook.api.PagedList;
import org.springframework.social.facebook.api.Post;
import org.springframework.social.facebook.api.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/")
public class HelloController {
private Facebook facebook;
private ConnectionRepository connectionRepository;
public HelloController(Facebook facebook, ConnectionRepository connectionRepository) {
this.facebook = facebook;
this.connectionRepository = connectionRepository;
}
@GetMapping
public String helloFacebook(Model model) {
if (connectionRepository.findPrimaryConnection(Facebook.class) == null) {
return "redirect:/connect/facebook";
}
String [] fields = { "id","name","birthday","email","location","hometown","gender","first_name","last_name"};
User user = facebook.fetchObject("me", User.class, fields);
String name=user.getName();
String birthday=user.getBirthday();
String email=user.getEmail();
String gender=user.getGender();
String firstname=user.getFirstName();
String lastname=user.getLastName();
model.addAttribute("name",name);
model.addAttribute("birthday",birthday);
model.addAttribute("email",email);
model.addAttribute("gender",gender);
model.addAttribute("firstname",firstname);
model.addAttribute("lastname",lastname);
model.addAttribute("facebookProfile", facebook.fetchObject("me", User.class, fields));
PagedList<Post> feed = facebook.feedOperations().getFeed();
model.addAttribute("feed", feed);
return "hello";
}
}
Как вы получили данные этого поля? Я могу получить только имя, имя и фамилию, все остальное равно null. Мне особенно нужно иметь данные друзей. Таким образом, это тоже нулевое значение. – vic
Это было исправлено в новой версии spring-social-facebook. Пожалуйста, добавьте следующую строку в ваш pom.xml
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-facebook</artifactId>
<version>3.0.0.M1</version>
</dependency>
Если вы получаете сообщение об ошибке, что эта версия не доступна, добавьте следующие строки, а также.
<repositories>
<repository>
<id>alfresco-public</id>
<url>https://artifacts.alfresco.com/nexus/content/groups/public</url>
</repository>
</repositories>
Спасибо за это ... Как насчет событий? Будете ли вы иметь какие-либо знания. org.springframework.social.UncategorizedApiException: (# 12) is_date_only поле устарело для версий v2.4 и выше] –
Это больше не работает для меня. Мне пришлось использовать репозиторий весеннего веха: –
См. Это сообщение для дополнительных зависимостей, необходимых для получения ConnectionRepository снова с 3.0.0.M1 http://stackoverflow.com/a/42175408/1410212 – lilalinux
Под Граалей весной фейсбук безопасности У меня была аналогичная проблема и благодаря @ user6904265 мне удалось получить его работу:
//This was provided example method:
//org.springframework.social.facebook.api.User fbProfile = facebook.userOperations().userProfile
//This is the groovy way of declaring fields:
String[] fields = ['id',"email", "age_range", "birthday","first_name",
"last_name","gender"] as String[]
//This bit pay attention to the User.class segment.
org.springframework.social.facebook.api.User fbProfile =
facebook.fetchObject("me",
org.springframework.social.facebook.api.User.class, fields)
В основном по умолчанию при условии, вышеприведенный пример состояний User.class
. Локальному запуску не удалось найти такие поля, как last_name и т. Д., И дал список, который он мог запросить. Те, которые были предоставлены, были из фактического класса User Security (по умолчанию для моего приложения), чтобы вы также искали правильные классы пользователей.
FacebookTemplate template = new FacebookTemplate(access_token);
String [] fields = { "id", "email", "first_name", "last_name" };
User profile = template.fetchObject("me", User.class, fields);
У меня были проблемы с новой версией spring-social-facebook. Чтобы исправить это, используйте версию 2.0.3.RELEASE вставьте следующий код в свой SocialService.Java
@PostConstruct
private void init() {
try {
String[] fieldsToMap = {
"id", "about", "age_range", "birthday", "context", "cover", "currency", "devices", "education", "email", "favorite_athletes", "favorite_teams", "first_name", "gender", "hometown", "inspirational_people", "installed", "install_type","is_verified", "languages", "last_name", "link", "locale", "location", "meeting_for", "middle_name", "name", "name_format","political", "quotes", "payment_pricepoints", "relationship_status", "religion", "security_settings", "significant_other","sports", "test_group", "timezone", "third_party_id", "updated_time", "verified", "viewer_can_send_gift","website", "work"
};
Field field = Class.forName("org.springframework.social.facebook.api.UserOperations").
getDeclaredField("PROFILE_FIELDS");
field.setAccessible(true);
Field modifiers = field.getClass().getDeclaredField("modifiers");
modifiers.setAccessible(true);
modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, fieldsToMap);
} catch (Exception ex) {
ex.printStackTrace();
}
}
Этот код не будет пытаться получить био поле из Facebook.
Вы можете посмотреть более подробную информацию здесь: https://github.com/jhipster/generator-jhipster/issues/2349
Супер! Это прекрасно работает. И я думаю, что это должен быть подходящий ответ на этот вопрос, так как это не только устраняет проблему только для одного сценария 'facebook.userOperations(). GetUserProfile()', но все остальные проблемы из-за того, что поле 'bio' прекращено. Спасибо за решение! – iamharish15
удалить параметр -> «био» с вашего апи вызова URL, для меня это решается
после
«»
Существует ошибка слияния с PR для решения этой проблемы: http s: //github.com/spring-projects/spring-social-facebook/pull/218 – pca
Любая идея, когда исправить будет проходить? Он все еще застрял там в 2.0.3 – dozer
PR был слит. Доступна версия [v3.0.0.M1] (https://github.com/spring-projects/spring-social-facebook/releases/tag/v3.0.0.M1). – user6904265