Нужна помощь в поиске друзей из вконтакте - PullRequest
0 голосов
/ 18 июня 2019

Я написал социальный клиент oauth2, но не смог получить список друзей авторизованного пользователя. Пожалуйста, посмотрите на мой код, чтобы увидеть, чего не хватает / С уважением

пожалуйста, посмотрите на @ RequestMapping ("вконтакте / друзья")

Ява 1,8 весенняя безопасность

 @SpringBootApplication
@RestController
@EnableOAuth2Client

public class SocialApplication extends WebSecurityConfigurerAdapter {

    @Autowired
    OAuth2ClientContext oAuth2ClientContext;

    @RequestMapping({ "/user", "/me" })
    public Map<String, String> user(Principal principal) {
        Map<String, String> map = new LinkedHashMap<>();
        map.put("name", principal.getName());
        return map;
    }

    //TODO как это оформить на фронтенде?
    @RequestMapping("/vkontakte/friends")
    public Map<String,String> friends() {
        OAuth2RestTemplate vkTemplate = new OAuth2RestTemplate(vk(), oAuth2ClientContext);
        UserInfoTokenServices tokenServicesvk = new UserInfoTokenServices(vkResource().getUserInfoUri(), vk().getClientId());
        tokenServicesvk.setRestTemplate(vkTemplate);

        ObjectNode resultNode = vkTemplate.getForObject(vkResource().getUserFriendsInfoUri(), ObjectNode.class);
        ArrayNode data = (ArrayNode) resultNode.get("data");
        Map<String, String> map = new LinkedHashMap<>();
        for (JsonNode dataNode : data) {
            //TODO надо как то правильно все получить?

        }

        return map;

1 Ответ

0 голосов
/ 18 июня 2019

Чтобы получить друзей из Вконтакте, вы должны объявить объект друга, который будет содержать все поля структуры JSON друга.

Согласно документации , у каждого друга есть идентификатор, имя и фамилия, однако, объект ответа немного сложнее, чем нам нужно, поэтому вы можете удалить то, что вам нужно.не нужно.

Предполагая, что нам нужны все атрибуты ответа, мы можем создать два объекта: результат и друга.

объект друга Вконтакте

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class VkontakteFriend {

    private Long id;

    @JsonProperty("first_name")
    private String firstName;

    @JsonProperty("last_name")
    private String lastName;
}

Общий объект результата

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class FriendResponse {

    private Long count;
    private List<VkontakteFriend> items;

}

Осталось только вызвать API и сопоставить ваш ответ с объектами Java.

 vkTemplate.getForObject(vkResource().getUserFriendsInfoUri(), FriendResponse.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...