2011-01-11 8 views
2

나는 프론트 엔드와 AJAX/JSON으로 통신하는 Spring MVC 응용 프로그램을 가지고 있으며 프론트 엔드에는 HTML이있는 웹 응용 프로그램이 있습니다.봄 MVC 3 -> 유효성 검사

@RequestMapping(value="add/", method=RequestMethod.POST) 
public @ResponseBody SerializePerson addProject(@RequestBody Person person) { 
    Person p = this.personService.addPerson(person); 
    return new SerializePerson(p.getId(), p.getName(), p.getEmail()); 
} 

하지만 지금은 누군가가없이 프로젝트를 생성 할 수있는 문제를 (이것은 매우 간단한 예입니다)이 : 데이터베이스에 요소를 추가

, 나는 백엔드 시스템에서이 작업을 수행 이름, 그래서 이름 = ""및 유효하지 않은 이메일 주소. 제 문제는 백엔드 시스템의 필드를 확인하고 싶습니다. 그들은이 이렇게 https://src.springsource.org/svn/spring-samples/mvc-showcase/src/main/java/org/springframework/samples/mvc/validation/

:

그래서 내가 여기에 스프링 MVC 쇼케이스를 발견 그래서

@RequestMapping("/validate") 
public @ResponseBody String validate(@Valid JavaBean bean, BindingResult result) { 
    if (result.hasErrors()) { 
     return "Object has validation errors"; 
    } else { 
     return "No errors"; 
    } 
} 

을, 이것이 가장 좋은 방법은? (그렇지 않으면 오류가 발생하지 않으면 2 단계로 이동 사용자에게 오류 메시지가 표시)

  1. 는 Person 객체의 유효성을 검사
  2. 가 DATBASE
에 Person 객체를 쓰기 : 그래서 두 단계를 수행해야

한 단계에서이 두 단계를 결합 할 수 있습니까? 그리고 프론트 엔드의 Person POST 객체를 백엔드의 "validate"메쏘드에 넣고 "Object valid validation errors"라고 말하는 것이 너무 좋지 않기 때문에 (name 또는 email) 어떤 필드가 실패 하는지를 알 수있는 방법은 무엇입니까 ?-)?

좋습니다.

내가이 예에 표시된 않았다

답변

2

: http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/

@RequestMapping(method=RequestMethod.POST) 
public @ResponseBody Map<String, ? extends Object> create(@RequestBody Account account, HttpServletResponse response) { 
    Set<ConstraintViolation<Account>> failures = validator.validate(account); 
    if (!failures.isEmpty()) { 
     response.setStatus(HttpServletResponse.SC_BAD_REQUEST); 
     return validationMessages(failures); 
    } else { 
     accounts.put(account.assignId(), account); 
     return Collections.singletonMap("id", account.getId()); 
    } 
} 
관련 문제