Java 我如何只获得类的两个属性
我的控制器有问题,它返回整个用户实例,而我只需要返回属性:“email”和“password”Java 我如何只获得类的两个属性,java,spring,spring-boot,spring-data,hibernate-jpa,Java,Spring,Spring Boot,Spring Data,Hibernate Jpa,我的控制器有问题,它返回整个用户实例,而我只需要返回属性:“email”和“password” 控制器类AuthController中的publicstringlogin()方法中存在问题(您将在右侧的行中找到提到它的注释) 控制器 package com.springboot.encuentas.controlador; import com.springboot.encuentas.library.Encrypt; import com.springboot.encuentas.model
控制器类
AuthController
中的publicstringlogin()
方法中存在问题(您将在右侧的行中找到提到它的注释)
控制器
package com.springboot.encuentas.controlador;
import com.springboot.encuentas.library.Encrypt;
import com.springboot.encuentas.model.User;
import com.springboot.encuentas.repository.UserRepository;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpSession;
import javax.transaction.Transactional;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
/**
*
* @author alfonso
*/
@Controller
public class AuthController {
@Autowired
public UserRepository userRepository;
@GetMapping(value = {"/signup"})
public String signup(Model model) {
model.addAttribute("user", new User());
return "signup";
}
@PostMapping(value = {"/signup"})
@Transactional
public String signup(@Valid User user, BindingResult result, Model model, HttpSession session) throws Exception {
if (result.hasErrors()) {
model.addAttribute("user", user);
return "signup";
} else {
List<User> userUserName = userRepository.findAll().stream()
.filter(u -> u.getUsername().equals(user.getUsername()))
.collect(Collectors.toList());
List<User> userEmail = userRepository.findAll().stream()
.filter(u -> u.getEmail().equals(user.getEmail()))
.collect(Collectors.toList());
if (userUserName.isEmpty()) {
if (userEmail.isEmpty()) {
Date utilDate = new Date(); //Fecha Actual
user.setIsActiva(Boolean.TRUE);
user.setIsSuperuser(Boolean.FALSE);
user.setPassword(Encrypt.encrypt(user.getPassword()));
user.setDateJoined(utilDate);
user.setDateJoined(utilDate);
userRepository.save(user);
Object[] data = {
user.getEmail(),
user.getFirstName(),
user.getIsSuperuser(),
user.getLastName(),
user.getUsername()
};
session.setAttribute("usersession", data);
return "redirect:/main";
} else {
result.rejectValue("email", "error.user", "Una cuenta existe con este correo.");
model.addAttribute("user", user);
return "signup";
}
} else {
result.rejectValue("username", "error.user", "Este usuario ya existe.");
model.addAttribute("user", user);
return "signup";
}
}
}
@GetMapping(value = {"/login"})
public String login(Model model, HttpSession session) {
Object[] user = (Object[]) session.getAttribute("usersession");
if (user != null) {
return "main";
} else {
model.addAttribute("user", new User());
return "login";
}
}
@PostMapping(value = {"/login"})
@Transactional
public String login(@Valid User user, BindingResult result, Model model, HttpSession session) throws Exception {
if (result.hasErrors()) {
model.addAttribute("user", user); //the problem is here
return "login";
} else {
List<User> userEmail = userRepository.findAll().stream()
.filter(u -> u.getEmail().equals(user.getEmail()))
.collect(Collectors.toList());
if (userEmail.isEmpty()) {
result.rejectValue("email", "error.user", "El email no esta registrado");
model.addAttribute("user", user);
return "login";
}
}
return "login";
}
}
package com.springboot.encuentas.model;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
/**
*
* @author alfonso
*/
@Entity
@Table(name = "user", schema= "ventas")
@EntityListeners(AuditingEntityListener.class)
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "users_seq_gen")
@SequenceGenerator(name = "users_seq_gen", sequenceName = "users_id_seq", allocationSize=1, schema="ventas")
private Long id;
@NotBlank(message = "El nombre es requerido")
private String firstName;
@NotBlank(message = "El apellido es requerido")
private String lastName;
@NotBlank(message = "El email es requerido")
private String email;
@CreatedDate
private Date lastLogin;
private Boolean isActiva;
@CreatedDate
private Date dateJoined;
@NotBlank(message = "La contraseña es requerida")
private String password;
@NotBlank(message = "El usuario es requerido")
private String username;
private Boolean isSuperuser;
public User() {
}
public User(String email, String password) {
this.email = email;
this.password = password;
}
public User(Long id, String firstName, String lastName, String email, Date lastLogin, Boolean isActiva, Date dateJoined, String password, String username, Boolean isSuperuser) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.lastLogin = lastLogin;
this.isActiva = isActiva;
this.dateJoined = dateJoined;
this.password = password;
this.username = username;
this.isSuperuser = isSuperuser;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getLastLogin() {
return lastLogin;
}
public void setLastLogin(Date lastLogin) {
this.lastLogin = lastLogin;
}
public Boolean getIsActiva() {
return isActiva;
}
public void setIsActiva(Boolean isActiva) {
this.isActiva = isActiva;
}
public Date getDateJoined() {
return dateJoined;
}
public void setDateJoined(Date dateJoined) {
this.dateJoined = dateJoined;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Boolean getIsSuperuser() {
return isSuperuser;
}
public void setIsSuperuser(Boolean isSuperuser) {
this.isSuperuser = isSuperuser;
}
}
Login.html
<div th:replace="~{layout/header :: header}"></div>
<div class="container p-4">
<div class="row">
<div class="col-md-4 mx-auto">
<div class="card text-center">
<div class="card-header">
<h3> Inicio de Session </h3>
</div>
<img src="images/logo.png" class="mx-auto w-25" />
<div class="card-body">
<form th:action="@{login}" th:object="${user}" method="POST">
<div class="form-group">
<input type="email" th:field="*{email}" placeholder="Email" class="form-control">
<small class="form-text text-danger" th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></small>
</div>
<div class="form-group">
<input type="password" th:field="*{password}" placeholder="Contraseña" class="form-control">
<small class="form-text text-danger" th:if="${#fields.hasErrors('password')}" th:errors="*{password}"></small>
</div>
<div class="form-group">
<button class="btn btn-success btn-block">
Login
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div th:replace="~{layout/footer :: footer}"></div>
伊尼西奥会议
登录
您可以按如下方式创建UserDTO:
class UserDTO{
String email;
String password;
public UserDTO(String email, String password) {
this.email = email;
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
然后
我创建了一个新的包DTO,并创建了一个名为Login的新类。那对我有用 @控制器
@GetMapping(value = {"/login"})
public String login(Model model, HttpSession session) {
model.addAttribute("login", new Login());
return "login";
}
@PostMapping(value = {"/login"})
@Transactional
public String LoginDto(@Valid Login login, BindingResult result, Model model, HttpSession session) throws Exception {
if (result.hasErrors()) {
model.addAttribute("login", login);
return "login";
} else {
List<User> userEmail = userRepository.findAll().stream()
.filter(u -> u.getEmail().equals(login.getEmail()))
.collect(Collectors.toList());
if (userEmail.isEmpty()) {
result.rejectValue("email", "error.user", "El email no esta registrado");
model.addAttribute("login", login);
return "login";
}
}
return "login";
}
login.html
<div th:replace="~{layout/header :: header}"></div>
<div class="container p-4">
<div class="row">
<div class="col-md-4 mx-auto">
<div class="card text-center">
<div class="card-header">
<h3> Inicio de Session </h3>
</div>
<img src="images/logo.png" class="mx-auto w-25" />
<div class="card-body">
<form th:action="@{login}" th:object="${login}" method="POST">
<div class="form-group">
<input type="email" th:field="*{email}" placeholder="Email" class="form-control">
<small class="form-text text-danger" th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></small>
</div>
<div class="form-group">
<input type="password" th:field="*{password}" placeholder="Contraseña" class="form-control">
<small class="form-text text-danger" th:if="${#fields.hasErrors('password')}" th:errors="*{password}"></small>
</div>
<div class="form-group">
<button class="btn btn-success btn-block">
Login
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div th:replace="~{layout/footer :: footer}"></div>
伊尼西奥会议
登录
不需要这个super()代码>调用ctor,您可以使用Lombok摆脱大部分样板代码。只需使用@Data
和@allargsconstuctor
注释即可。@DavidConrad-我同意。我忘了删除super()
。我现在已经更新了代码。不确定OP是否使用Lombok。您遵循了我的解决方案,它对您有效。您可以接受我的回答,以便未来的访问者也可以自信地使用该解决方案。检查以了解如何做。
@GetMapping(value = {"/login"})
public String login(Model model, HttpSession session) {
model.addAttribute("login", new Login());
return "login";
}
@PostMapping(value = {"/login"})
@Transactional
public String LoginDto(@Valid Login login, BindingResult result, Model model, HttpSession session) throws Exception {
if (result.hasErrors()) {
model.addAttribute("login", login);
return "login";
} else {
List<User> userEmail = userRepository.findAll().stream()
.filter(u -> u.getEmail().equals(login.getEmail()))
.collect(Collectors.toList());
if (userEmail.isEmpty()) {
result.rejectValue("email", "error.user", "El email no esta registrado");
model.addAttribute("login", login);
return "login";
}
}
return "login";
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.springboot.encuentas.model.dto;
import javax.validation.constraints.NotBlank;
/**
*
* @author alfonso
*/
public class Login {
@NotBlank(message = "El email es requerido")
private String email;
@NotBlank(message = "La contraseña es requerida")
private String password;
public Login() {
}
public Login(String email, String password) {
this.email = email;
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
<div th:replace="~{layout/header :: header}"></div>
<div class="container p-4">
<div class="row">
<div class="col-md-4 mx-auto">
<div class="card text-center">
<div class="card-header">
<h3> Inicio de Session </h3>
</div>
<img src="images/logo.png" class="mx-auto w-25" />
<div class="card-body">
<form th:action="@{login}" th:object="${login}" method="POST">
<div class="form-group">
<input type="email" th:field="*{email}" placeholder="Email" class="form-control">
<small class="form-text text-danger" th:if="${#fields.hasErrors('email')}" th:errors="*{email}"></small>
</div>
<div class="form-group">
<input type="password" th:field="*{password}" placeholder="Contraseña" class="form-control">
<small class="form-text text-danger" th:if="${#fields.hasErrors('password')}" th:errors="*{password}"></small>
</div>
<div class="form-group">
<button class="btn btn-success btn-block">
Login
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div th:replace="~{layout/footer :: footer}"></div>