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

请看@RequestMapping(“ vkontakte / friends”)

Java 1.8 Spring安全性

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

最佳答案

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

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

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

Vkontakte朋友对象

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

10-07 19:06