Сделать Json Angular объект - PullRequest
0 голосов
/ 18 января 2020

Я столкнулся с небольшими трудностями, вышел из системы входа в систему для моего проекта. Проект написан на JAVA, SPRINGBOOT и связан с ANGULAR У меня есть функция входа на сервер, которая возвращает JSON объект, который выглядит следующим образом: {"type": 2, "token": "dab022de 011a 4"} И для дальнейшего тестирования я хочу использовать эти два объекта в angular после того, как я их получу, например: если вы наберете = 2, вы увидите компонент, предназначенный для вас. Если вы наберете = 1, вы увидите другой компонент. Для этого мне действительно нужно записать возвращаемое значение с сервера в объект, например: this. clientType = _________? Добавляет некоторый код, чтобы сделать его более понятным:

код входа в систему на стороне сервера:

@PostMapping("/login")
public ResponseEntity<LoginInfo> login(@RequestParam String email, @RequestParam String password)
        throws InvalidLoginException {
    ClientSession clientSession = loginSystem.createClientSession(email, password);

if (clientSession == null) {
    throw new InvalidLoginException(
            String.format("Invalid login with email: %s and password: %s .", email, password));
}
String token = generateToken();
clientSession.accessed();
LoginInfo loginfo;
for (Entry<String, ClientSession> entry : tokensMap.entrySet()) {
    if (entry.getValue().getAbsService().getClientId() == clientSession.getAbsService().getClientId()
            && entry.getValue().getAbsService().getRole() == clientSession.getAbsService().getRole()) {
        return ResponseEntity.ok(loginfo = new LoginInfo(entry.getValue().getAbsService().getRole(), token));
    }
}
tokensMap.put(token, clientSession);
LoginInfo loginInfo = new LoginInfo(clientSession.getAbsService().getRole(), token);
return ResponseEntity.ok(loginInfo);
}

функция входа в typeSqript:

login():void {
    let userCredentials = new UserCredentials(this.email, this.password);

    let obsJwt = this.authService.authenticateMe(userCredentials);
    obsJwt.subscribe(myToken=>{
      console.log(myToken);//return  {"type":2,"token":"dab022de 011a 4"} for example
      localStorage.setItem("token",myToken.any); // here i want to put just the token, its not working too...
      this.modeService.mode = this.modeService.LOOGED_IN;

    }, err=>{
      alert("error: " + err.message);
    })
  }

В этой функции я не уверен о что-нибудь , я довольно новичок в angular, так что если у вас есть какие-либо общие советы по улучшению, я хотел бы услышать

1 Ответ

0 голосов
/ 18 января 2020

Это зависит от того, что возвращает authenticateMe функцию authService.

Предположим, что возвращает объект из класса или реализует интерфейс, что-то вроде Observable<LoginResponse> где:

interface LoginResponse {
  type: number,
  token: string
}

Если это так, то вам просто нужно получить доступ к свойствам,

obsJwt.subscribe(myToken=>{
  localStorage.setItem("token", myToken.token);
  localStorage.setItem("type", myToken.type);
}, err=>{
  alert("error: " + err.message);
})

Если по какой-то причине это строка Observable<string> в json формате, то вам нужно проанализировать ее к объекту

obsJwt.subscribe(myToken=>{
  const obj = JSON.parse(myToken);
  localStorage.setItem("token", obj.token);
  localStorage.setItem("type", obj.type);
}, err=>{
  alert("error: " + err.message);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...