需要帮助来从vkontakte获取朋友

时间:2019-06-18 14:26:00

标签: java spring security oauth-2.0

我已经编写了oauth2社交客户端,但是无法获取授权用户的朋友列表 请查看我的代码以查看缺少的内容/ 问候

请查看 @RequestMapping(“ vkontakte / friends”)

java 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 :(得分:0)

为了从Vkontakte获取朋友,必须声明一个friend对象,该对象将包含朋友具有的JSON结构的所有字段。

根据documentation,每个朋友都有一个id,名字和姓氏,但是,响应对象比我们需要的要复杂一些,因此您可以删除不需要的对象。 / p>

假设我们需要响应的所有属性,我们可以提出两个对象:结果和朋友。

Vkontakte朋友对象

name

通用结果对象

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;
}

剩下的唯一事情就是调用API并将您的响应映​​射到Java对象。

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;

}