首页 > 解决方案 > 我从注册面板获取空值到我的数据库

问题描述

我正在尝试将有关注册用户/客户端的数据保存到数据库,但我得到的是空值。我一直在寻找导致这种情况的原因,但我不知道我做错了什么。我已经发布了我的四个课程。

在 IntelljIDEA 我有这样的休眠查询

Hibernate: 
    select
        nextval ('client_sequence')
Hibernate: 
    insert 
    into
        client
        (email, firstName, lastName, phoneNumber, age, appUserRole, gender, loginName, password, id) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

注册控制器

    package com.example.demo.registration;

    import lombok.AllArgsConstructor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.*;

    @Controller
    @RequestMapping("/registration")
    @AllArgsConstructor
    public class RegistrationController {

     RegistrationService registrationService;



     /* HTTP GET Request for read registartion.html page from server */
     @GetMapping
     public String showRegistrationPanel() {
         return "registration";
     }

     /* HTTP POST Request for insert data to database on server */
     @PostMapping
     public String register(@ModelAttribute("client") RegistrationDTO request, Model model) {
             registrationService.register(request);
             model.addAttribute("client",request);
           return "redirect:/registration?success";
     }

    }

注册服务

    package com.example.demo.registration;

    import com.example.demo.client.AppUserRole;
    import com.example.demo.client.Client;
    import com.example.demo.client.ClientService;
    import lombok.AllArgsConstructor;
    import org.springframework.stereotype.Service;

    @Service
    @AllArgsConstructor
    public class RegistrationService {

    /*   */
    private final ClientService clientService;
    /*  */
    private final EmailValidator emailValidator;

    /* Method register new user to system  */
    public Client register(RegistrationDTO request) {
        /* Check if Email is valid */
      /*  boolean isValidEmail = emailValidator.test(request.getEmail());
        if(!isValidEmail) {
            throw new IllegalStateException("email not valid");
        } */
        /* This method uses clientService to register new client */
        return clientService.signUpClient(
            new Client(
                    request.getFirstName(),
                    request.getLastName(),
                    request.getEmail(),
                    request.getPhoneNumber(),
                    request.getLoginName(),
                    request.getPassword(),
                    AppUserRole.USER
            )
        );

    }
}

客户服务

package com.example.demo.client;


import lombok.AllArgsConstructor;
import lombok.Data;

import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("clientService")
@AllArgsConstructor
@Data
public class ClientService implements UserDetailsService {


    private final static String USER_NOT_FOUND = "user with email %s not found";
    private final ClientRepository clientRepository;

    private final BCryptPasswordEncoder bCryptPasswordEncoder;


    public List<Client> getClients() {
        return clientRepository.findAll();
    }


    public void saveClient(Client client) {
        clientRepository.save(client);
    }

    public void deleteClient(Client client) {
        clientRepository.delete(client);
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        return clientRepository.findByEmail(username).
                orElseThrow(() ->
                        new UsernameNotFoundException(String.format(USER_NOT_FOUND)));
    }

    
    public Client signUpClient(Client client) {
      
        //    String encodedPassword = bCryptPasswordEncoder.encode(client.getPassword());

        //  client.setPassword(encodedPassword);

       return clientRepository.save(client);

    }

 }

}

客户

package com.example.demo.client;

import lombok.*;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import javax.persistence.*;
import java.util.Collection;
import java.util.Collections;

@Entity
@Table(name="client",uniqueConstraints = @UniqueConstraint(columnNames = "email"))
@AttributeOverrides({
        @AttributeOverride(name="Id",column=@Column(name="Id")),
        @AttributeOverride(name="firstName",column=@Column(name="firstName")),
        @AttributeOverride(name="lastName",column=@Column(name="lastName")),
        @AttributeOverride(name="email",column=@Column(name="email")),
        @AttributeOverride(name="phoneNumber",column=@Column(name="phoneNumber"))
})
@Getter
@Setter
@ToString
@EqualsAndHashCode
@NoArgsConstructor
public class Client extends Person implements UserDetails {


    @Column(name="age")
    private int age;
    @Column(name="gender")
    private String gender;
    @Column(name="loginName")
    private String loginName;
    @Column(name="password")
    private String password;
    @Enumerated (EnumType.STRING)
    private AppUserRole appUserRole;
  

    public Client(String firstName, String lastName, String email,
                  String phoneNumber, String loginName,String password,AppUserRole appUserRole) {
        super(firstName, lastName, email, phoneNumber);
        this.loginName = loginName;
        this.password = password;
        this.appUserRole = appUserRole;
    }

    public Client(String firstName, String lastName, String email,
                  String phoneNumber, int age, String gender,
                  String loginName,String password,AppUserRole appUserRole) {
        super(firstName, lastName, email, phoneNumber);
        this.age = age;
        this.gender = gender;
        this.loginName = loginName;
        this.password = password;
        this.appUserRole = appUserRole;
    }


    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        SimpleGrantedAuthority authority =
                new SimpleGrantedAuthority(appUserRole.name());
        return Collections.singletonList(authority);
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return loginName;
    }

}

标签: javaspringpostgresqlspring-mvcspring-security

解决方案


推荐阅读