【问题标题】:Need help fetch friends from vkontakte需要帮助从 vkontakte 获取朋友
【发布时间】:2019-11-01 05:33:05
【问题描述】:

我编写了 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;

【问题讨论】:

    标签: java spring security oauth-2.0


    【解决方案1】:

    为了从 Vkontakte 获取好友,您必须声明一个好友对象,该对象将包含好友的 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);
    

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 2019-12-31
      • 2012-05-10
      • 2020-02-09
      相关资源
      最近更新 更多