Почему произошла эта ошибка? : Ошибка поля в объекте 'vo' в поле 'age' - PullRequest
0 голосов
/ 13 июля 2020

Я хочу сделать функцию, которая проверяет, существует ли уже входной идентификатор в базе данных пользователя. Я использовал ajax, но произошла эта ошибка.

Ошибка поля в объекте 'vo' в поле 'age': отклоненное значение []; коды [typeMismatch.vo.age, typeMismatch.age, typeMismatch.int, typeMismatch]; аргументы [org.springframework.context.support.DefaultMessageSourceResolvable: коды [vo.age, age]; аргументы []; сообщение по умолчанию [возраст]]; сообщение по умолчанию [Не удалось преобразовать значение свойства типа 'java .lang.String' в требуемый тип 'int' для свойства 'age'; вложенное исключение: java .lang.NumberFormatException: для входной строки: ""] в org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument (ModelAttributeMethodProcessor. java: 111) atframeg.spring.spring. (. HandlerMethodArgumentResolverComposite java: 75) support.HandlerMethodArgumentResolverComposite.resolveArgument в org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues ​​(InvocableHandlerMethod * * тысяча тридцать-девять:. 156) при org.springframework.web.method.support.InvocableHandlerMethod. invokeForRequest (InvocableHandlerMethod. java: 117) в org.springframework.web.servlet. mvc .method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInservvocableHandlerMethod.invokeAndHandle (ServletInservvocableHandlerMethod. * * .method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod (RequestMappingHandlerAdapter. java: 617) в org.springframework.web.servlet. mvc .method.annotation.RequestMappingHandlerInternal (RhandleAdapter. equestMappingHandlerAdapter. java: 578) в org.springframework.web.servlet. mvc .method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter. java: 80) в org.springframework.Dispatcher.Dispatcher. java: 923) в org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet. java: 852) в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet. java: org.Servlet. *1051*: .springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet. java: 789) в javax.servlet.http.HttpServlet.service (HttpServlet. java: 660) в javax.servlet.httpletp.ttpServlet. . java: 741) в организации apache .catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain. java: 231) в организации apache .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. * 10 : 166) в организации apache .tomcat.websocket.server.WsFilter.doFilter (WsFilter. java: 53) в организации apache .catalina.core.ApplicationFilterChain.interna lDoFilter (ApplicationFilterChain. java: 193) в org. apache .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. java: 166) в org.springframework.web.filter.CharacterEncodingFilter.CharacterEncodingFilter. *: 88) в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter. java: 76) в org. apache .catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain *: * 3) в 10. . apache .catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain. java: 166) в орг. apache .catalina.core.StandardWrapperValve.invoke (StandardWrapperValve. java: 202) в орг. apache .catalina.core.StandardContextValve.invoke (StandardContextValve. java: 96) в орг. apache .catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase. java: 541) в орг. apache .catalina.core .StandardHostValve.invoke (StandardHostValve. java: 139) в орг. apache .catalina.valves.ErrorReportValve.invoke (ErrorReportValve. java: 92) в орг. apache .catalina .valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve. java: 678) в орг. apache .catalina.core.StandardEngineValve.invoke (StandardEngineValve. java: 74) в орг. apache .catalina.connector. .service (CoyoteAdapter. java: 343) в организации apache .coyote.http11.Http11Processor.service (Http11Processor. java: 367) в организации apache .coyote.AbstractProcessorLight.process (AbstractProcessorLight. java: 65) в орг. apache .coyote. AbstractProtocol $ ConnectionHandler.process (AbstractProtocol. java: 860) в орг. apache .tomcat.util. net .NioEndpoint $ SocketProcessor.doRun (NioEndpoint. java: 1598) в орг. apache. tomcat.util. net .SocketProcessorBase.run (SocketProcessorBase. java: 49) в java .util.concurrent.ThreadPoolExecutor.runWorker (Неизвестный источник) в java .util.concurrent.ThreadPoolExecutor $ (Неизвестный источник) в орг. apache .tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread. java: 61) в java .lang.Thread.run (Неизвестный источник)

Мой код:

vo class:

package vo;

public class UserVO {
    String id;
    String password;
    String name;
    int age;
    public String getId() {
        return id;
    }
    public String getPassword() {
        return password;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public void setId(String id) {
        this.id = id;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "UserVO [id=" + id + ", password=" + password + ", name=" + name + ", age=" + age + "]";
    }
    
}

А UserDAOImpl это:

package daoimpl;

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;
import org.bson.conversions.Bson;
import org.springframework.stereotype.Repository;

import com.google.gson.Gson;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

import dao.UserDAO;
import vo.UserVO;

@Repository
public class UserDAOImpl implements UserDAO{
    
    MongoClientURI uri = null;
    MongoClient mongoClient = null;
    MongoDatabase mongodb = null;
    MongoCollection<Document> collection = null;
    MongoCursor<Document> cursor = null;
    
    public UserDAOImpl(){
        try {
            uri = new MongoClientURI(
                "mongodb://boxak:Second142857%21@exercise-shard-00-00-atylc.mongodb.net:27017,exercise-shard-00-01-atylc.mongodb.net:27017,exercise-shard-00-02-atylc.mongodb.net:27017/test?ssl=true&replicaSet=Exercise-shard-0&authSource=admin&retryWrites=true&w=majority"
            );
            mongoClient = new MongoClient(uri);
            mongodb = mongoClient.getDatabase("MyProject");
            collection = mongodb.getCollection("UserInfo");
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public boolean insert(UserVO vo) {
        Document document = new Document();
        document.put("id", vo.getId());
        document.put("password", vo.getPassword());
        document.put("name",vo.getName());
        document.put("age", vo.getAge());
        boolean flag = false;
        try {
            collection.insertOne(document);
            flag = true;
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    
    public List<UserVO> listAll(){
        List<UserVO> list = new ArrayList<>();
        try {
            cursor = collection.find().iterator();
            while(cursor.hasNext()) {
                Gson gson = new Gson();
                String json = cursor.next().toJson();
                list.add(gson.fromJson(json, UserVO.class));
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    
    public boolean update(UserVO vo) {
        boolean flag = false;
        try {
            Document document = new Document();
            document.put("id", vo.getId());
            document.put("password", vo.getPassword());
            document.put("name", vo.getName());
            document.put("age", vo.getAge());
            collection.updateOne(Filters.eq("id",vo.getId()), new Document("$set",document));
            flag = true;
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    
    public boolean delete(String id) {
        boolean flag = false;
        try {
            collection.deleteOne(Filters.eq("id",id));
            flag = true;
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    
    public boolean hasId(String id) {
        
        int cnt = 0;
        System.out.println("id : "+id);
        try {
            cnt = (int)collection.countDocuments(Filters.eq("id",id));
            
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        
        return cnt==0 ? false : true;
    }
}

package com.my.project;

import java.util.HashMap;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import daoimpl.UserDAOImpl;
import vo.UserVO;

@Controller
public class UserController {
    
    @RequestMapping(value="/home",method=RequestMethod.GET)
    public String home() {
        return "home";
    }
    
    @RequestMapping(value="/signin.do",method=RequestMethod.POST)
    public String insert(@ModelAttribute("vo")UserVO vo) {
        UserDAOImpl dao = new UserDAOImpl();
        dao.insert(vo);
        return "sign.done";
    }
    
    @RequestMapping(value="/signForm",method=RequestMethod.GET)
    public String signForm() {
        return "signform";
    }
    
    @RequestMapping(value="/idCheck",method=RequestMethod.POST)
    @ResponseBody
    public HashMap<String,String> idCheck(String id) {
        System.out.println("HERE!!");
        UserDAOImpl dao = new UserDAOImpl();
        Boolean result = new Boolean(dao.hasId(id));
        HashMap<String,String> map = new HashMap<>();
        map.put("result",result.toString());
        return map;
    }
}

И подпись. jsp это:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Signin Form</title>
<script>

function repeatCheck(){
    var request = new XMLHttpRequest();
    var id = document.getElementsByName("id")[0].value;
    request.onload = function(event){
        if(request.status==200){
            var str = request.responseText;
            var obj = JSON.parse(str);
            console.log(obj);
        }
    }
    request.open('POST',"/project/idCheck",true);
    request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    request.send("id="+id);
}

</script>
</head>
<body>
<form action="/project/signin.do" method="post">
    <p>ID : </p>
    <input type="text" placeholder="ID" name="id">
    <button onclick="repeatCheck();">ID repeat check</button>
    <p>Passwrod : </p>
    <input type="password" placeholder="PASSWORD" name="password">
    <p>Name : </p>
    <input type="text" placeholder="NAME" name="name">
    <p>Age : </p>
    <input type="number" placeholder="AGE" name="age">
    <input type="submit" value="submit">
</form>
</body>
</html>

Что со мной не так? Я предполагаю, что когда я нажимаю кнопку «Повторная проверка идентификатора», страница jsp передает весь ввод (идентификатор, пароль, имя, возраст) контроллеру. Я хочу, чтобы только jsp давал данные «ID» при нажатии «Повторная проверка ID». Как я могу решить эту проблему?

...