首页 > 解决方案 > $.ajax => @ModelAttribute = null

问题描述

我是一名学习Java的学生。

我正在学习和练习,但我问你一个问题,因为我有一个问题。

  1. 通过 $.ajax 从 join.jsp 发送(用户名、密码、irum、电子邮件)到控制器
  2. 从Controller获取@ModelAttribute并交给Service
  3. 输入服务作为插入数据库我正在考虑一些事情。

此外

  1. 不发送电子邮件。
  2. ID 和密码规则不适用。

我会写下代码。

加入.jsp

$("#join_btn").on("click", function() {
    var formData = new FormData($("#join_form")[0]);
    for(var item of formData.entries()) {                // Normal output
        console.log(item [0]+ ' : '+ item [1]); 
    }
    alert("콘솔확인용");                                       // Normal output
    $.ajax({
        url: "/www/users/user",
        method: "post",
        data: formData,
        contentType: false,     
        processData: false      
    }).done(()=>{alert("succ")})
    .fail(()=>{alert("fail")});                     // "fail" output
});

↓</p>

控制器

@PostMapping("/users/user")
public ResponseEntity<?> join(@ModelAttribute UserDto.Join dto) {
    System.out.println("==============================================");
    System.out.println("dto : " + dto);            // null output
    service.join(dto);
    return ResponseEntity.ok(null);
}

↓</p>

服务

@Service
public class UserRestService {
  private UserDao userDao;
  private ModelMapper modelMapper;

@Transactional
  public void join(UserDto.Join dto) {
    User user = modelMapper.map(dto, User.class);     // (dto, entity)
    userDao.insert(user);
    }
}

dto

@NoArgsConstructor
public class UserDto {
  @Data
  public static class Join {
      private String username;
      private String password;
      private String irum;
      private String email;
   }
}

public interface UserDao {

public User findById(String username);
public User findByEmail(String email);
public int insert(User user);
}

实体

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain=true)
public class User {
    private String username;
    private String password;
    private String irum;
    private String email;
}

用户映射器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3- 
mapper.dtd">
 <mapper namespace="com.iciamall.www.dao.UserDao">

    <insert id="insert">
         insert into users(username, password, irum, email)
         values(#{username}, #{password}, #{irum}, #{email})
    </insert>

==================================================== ==================================================== =====

控制器 System.out.println("dto : " + dto); => UserDto.Join(用户名=null,密码=null,irum=null,电子邮件=null)

控制台 => [请求处理失败;嵌套异常是 java.lang.NullPointerException:无法调用“com.iciamall.www.service.UserRestService.join(com.iciamall.www.dto.UserDto$Join)”,因为“this.service”为空]

标签: ajax

解决方案


推荐阅读