Я хочу сделать функцию, которая проверяет, существует ли уже входной идентификатор в базе данных пользователя. Я использовал 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». Как я могу решить эту проблему?