有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java需要帮助从vkontakte获取朋友

我已经编写了oauth2社交客户端,但无法获取授权用户的好友列表 请看一下我的代码,看看遗漏了什么/ 问候

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

Java1.8Spring安全性

 @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) 个答案

  1. # 1 楼答案

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

    根据documentation,每个朋友都有一个id、名字和姓氏,然而,响应对象比我们需要的要复杂一些,所以您可能会删除不需要的内容

    假设我们需要响应的所有属性,我们可以得到两个对象:result和friend

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