用SpringBoot登录

时间:2018-07-02 09:22:31

标签: spring-boot

我正在使用SpringBoot迈出第一步……我想提供一项服务登录,在其中放置用户和密码,如果正确,它将返回用户的数据。

目前,我可以根据用户数据做些什么,但是我可以解决我想要的,对此我将不胜感激。

我有2个问题。我暂时不知道如何发送2个参数“用户名”,“密码”。发送1。

存储库:

import org.springframework.data.repository.CrudRepository;

import prueba.Usuario;

public interface UsuRepository extends CrudRepository<Usuario,String>{

}

usuarioClass:

@Entity
@Table(name="usuario")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Usuario {

     @Id
     @Column(name="id")
     private int id;

     @Column(name="name")
     private String name;

     @Column(name="email")
     private String email;

     public Usuario() {
    }
     public Usuario(int id, String name, String email) {
            this.id = id;
            this.name = name;
            this.email = email;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "User[id=" + id + ", name=" + name + ", email=" + email + "]";
    }

控制器

@RestController
@RequestMapping(value={"/usu"})
public class UsuController {

    @Autowired
    UsuService usuRepository;


     @RequestMapping("/")
        String home() {
            return "Servicio Usuario!";
     }


          @RequestMapping(method=RequestMethod.GET, path = "/Login/{userName}" ,  produces = MediaType.APPLICATION_JSON_VALUE)
    public Usuario Login(@PathVariable("userName") String userName) {
        Usuario tasks = usuRepository.getUsu(userName);
        return tasks; 
    }

接口:

public interface UsuService { 
      public List<Usuario> getUsus() ;
      public Usuario getUsu(String name);
}

服务:

@Override
    public Usuario getUsu(String user) {
    Usuario usu;
    return usu = usuRepository.findOne(user);

    }

运行:

http://localhost:8080/usu/Login/edu

错误:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Mon Jul 02 10:31:34 CEST 2018
There was an unexpected error (type=Internal Server Error, status=500).
Provided id of the wrong type for class prueba.Usuario. Expected: class java.lang.Integer, got class java.lang.String; nested exception is java.lang.IllegalArgumentException: Provided id of the wrong type for class prueba.Usuario. Expected: class java.lang.Integer, got class java.lang.String

我已经做过一次测试,可以返回所有用户,并且可以正常工作。

此刻,我想输入用户名,然后返回数据,然后使用密码登录。谢谢。

我看过其他教程“使用SpringBoot登录”,但是本教程具有“安全性,encriptyng等”,但是我是新手,因此我需要轻松登录服务...

1 个答案:

答案 0 :(得分:0)

我认为您在这里混入了一些概念。看到你有这个:

1)ID为int类型的类Usuario:

public class Usuario {

     @Id
     @Column(name="id")
     private int id;

     ...
}

2)请求映射,其接收的用户类型为String:

@RequestMapping(method=RequestMethod.GET, path = "/Login/{userName}" ,  produces = MediaType.APPLICATION_JSON_VALUE)
public Usuario Login(@PathVariable("userName") String userName) { ...

3)使用String作为Usuario实体ID类型的存储库:

public interface UsuRepository extends CrudRepository<Usuario,String>

结论:

当您这样做:

public Usuario getUsu(**String** user) {
    ...
    return usu = usuRepository.findOne(**user**);
}

您要让存储库查找具有 String ID的Usuario实体,但Usuario具有 int 作为ID。

因此出现错误:

Provided id of the wrong type for class prueba.Usuario. **Expected**: class java.lang.Integer, **got** class java.lang.String; nested exception is java.lang.IllegalArgumentException: Provided id of the wrong type for class prueba.Usuario. Expected: class java.lang.Integer, got class java.lang.String

您需要这样的东西:

public interface UsuRepository extends CrudRepository<Usuario,Integer> {

    Usuario getByName(String username);
}

希望我能帮上忙。 :-)