Jak zminić kontroler( w nim jest cyrk w tej chwili) tak żeby zapisywał przy użyciu np. rest clienta oraz porszę o sprawdzenie czy dobrze mam napisane resztę kodu. Również nie wiem jak załatwić sparwe User i UserRequest jak powinny wygladać Dopiero zaczynam naukę ze springiem.
Controller
@Controller
public class SignUpController {
private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
private static final Logger log = LoggerFactory.getLogger(SignUpController.class);
@Autowired
private UserDao userDao;
@Inject
MyUserDetailsServ myUserDetailsServ
@RequestMapping(value = "/users", method = RequestMethod.POST )
public String users(@ModelAttribute @RequestBody @Valid User user, BindingResult bindingResult){
log.info("Create new USER");
myUserDetailsServ.registerUser(toUser(user), bindingResult);
private static UserRequests toUser(User user){
UserRequests userReq = new UserRequests();
userReq.setId(user.getId());
userReq.setEmail(user.getEmail());
userReq.setEmail(user.getPassword());
return userReq;
}
Albo taki kontroler który wyświetla w .jsp( to umiem) ale nie wiem jak zorobić zeby była to aplikacja restowa bez użycia views jsp tylko Jsona
@Controller
public class SignUpController {
private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
private static final Logger log = LoggerFactory.getLogger(SignUpController.class);
@Autowired
private UserDao userDao;
@Inject
MyUserDetailsServ myUserDetailsServ;
@RequestMapping(value = "/user", method = RequestMethod.GET)
public ModelAndView signUpPage() {
ModelAndView model = new ModelAndView();
model.addObject("pageTitle", "Sign up page");
model.setViewName("signup");
return model;
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public ModelAndView signUp(
@RequestParam(value = "email", required = false) String email,
@RequestParam(value = "password", required = false) String password,
@RequestParam(value = "passwordConfirm", required = false) String passwordConfirm) {
ModelAndView model = new ModelAndView();
model.addObject("pageTitle", "Sign up page");
model.setViewName("signup");
if (!isEmailValid(email)) {
model.addObject("error", "Email addres is not valid. Please use correct value.");
return model;
}
if (isEmailExists(email)) {
model.addObject("error", "Please use different email address");
return model;
}
if (!isPasswordCorrect(password, passwordConfirm)) {
model.addObject("error", "Password is incorrect or is not match with Confirm password value. Please use correct values.");
return model;
}
User user = new User();
user.setEmail(email);
user.setPassword(password);
userDao.save(user);
model.addObject("info", "Your account has been created successfully.");
return model;
}
private boolean isEmailExists(String email) {
User user = userDao.findUserByEmail(email);
return user != null;
}
private boolean isEmailValid(String email) {
boolean result = false;
if (email != null && !email.isEmpty()) {
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
Matcher matcher = pattern.matcher(email);
result = matcher.matches();
}
return result;
}
private boolean isPasswordCorrect(String password, String passwordConfirm) {
boolean result = false;
if (password != null && !password.isEmpty() && passwordConfirm != null && !passwordConfirm.isEmpty()) {
result = password.equals(passwordConfirm);
}
return result;
}
MyUserDeatailService.xml
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import org.springframework.validation.Errors;
@Service
public class MyUserDetailsService implements MyUserDetailsServ{
@Inject
private UserDao userDao;
private void validateEmail(String email, Errors errors){
if(userDao.findUserByEmail(email) !=null){
errors.rejectValue("email", "email is duplicate",
new String[] { email }, null );
}
}
@Override
public boolean registerUser(User user, Errors errors) {
validateEmail(user.getEmail(), errors);
boolean valid = !errors.hasErrors();
if(valid){ userDao.save(user); }
return valid;
}
}
UserRequest
public class UserRequests {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
@NotNull
private Long id;
@NotNull
@Email
@Column(name="email")
private String email;
@Column(name="pssword")
@Size(min = 6, max = 20)
@NotNull
private String password;
public UserRequests(String email, String password) {
this.email = email;
this.password = password;
}
public UserRequests() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return "User{" + "id=" + id + ", email=" + email + ", password=" + password + '}';
}
}
User
@Entity
@Table(name = "user")
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
@NotNull
private Long id;
@NotNull
@Email
@Column(name="email")
private String email;
@Column(name="pssword")
@Size(min = 6, max = 20)
@NotNull
private String password;
public User(String email, String password) {
this.email = email;
this.password = password;
}
public User() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return "User{" + "id=" + id + ", email=" + email + ", password=" + password + '}';
}
}
UserDaoImp
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.security.authentication.encoding.PasswordEncoder;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@Repository
public class UserDaoImpl implements UserDao {
private SessionFactory sessionFactory;
private PasswordEncoder passwordEncoder;
@Transactional()
@Override
public User findUserByEmail(String email) {
List<User> users = getSessionFactory().getCurrentSession()
.createQuery("from User where email = :email")
.setParameter("email", email).list();
return (CollectionUtils.isEmpty(users)) ? null : users.get(0);
}
@Transactional
@Override
public void save(User user) {
getSessionFactory().getCurrentSession().save(user);
String encodedPassword = getPasswordEncoder()
.encodePassword(user.getPassword(), user.getEmail());
user.setPassword(encodedPassword);
getSessionFactory().getCurrentSession().save(user);
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public PasswordEncoder getPasswordEncoder() {
return passwordEncoder;
}
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
}
usunięcie dziur z posta - furious programming