2014-03-16 3 views
0

Я использую Spring и Hiberate, чтобы создать просто веб-сервис. В контроллере у меня длинный список аргументов из формы.Spring @RequestParam с классом

Мой контроллер

@RequestMapping(value="/addAccount", method=RequestMethod.POST) 
public String addAccoundPOST(@RequestParam(value = "username") String username, 
           @RequestParam(value = "password") String password, 
           @RequestParam(value = "email")  String email, 
           @RequestParam(value = "name")  String name, 
           @RequestParam(value = "surname") String surname, 
           @RequestParam(value = "birth_date") String birth_date, 
           @RequestParam(value = "place")  String place, 
           @RequestParam(value = "province") String province, 
           @RequestParam(value = "motorcycle") String motorcycle, 
           @RequestParam(value = "tel")  String tel) 
{ 
    User user = new User(); 

    if(username != null && username.length() >= 4) 
     user.setUsername(username); 

    if(password != null && password.length() >= 4) 
     user.setPassword(password); 

    // and more, and more, and mode.... 

    return "addAccount"; 
} 

Часть класса User:

@Entity 
@Table(name = "users", catalog = "dbjadenazlot") 
public class User implements Serializable { 
private int uid; 

private String ...; 
/* --------------------------------- GET ------------------------------ */ 

@Id 
@GeneratedValue(strategy = IDENTITY) 
@Column(name = "uid", unique = true, nullable = false) 
public int getUID()    
    { return uid;} 

@Column(name = "name", length = 45) 
public String getName()   
    { return name; } 
// setters and rest code.. 
} 

Можно ли конвертировать мои аргументы из запроса POST к классу? Если это возможно, что требуется?

@RequestMapping(value="/addAccount", method=RequestMethod.POST) 
public String addAccoundPOST(@RequestParam(value = "user") User user) 
{ 

    return "addAccount"; 
} 

Как я могу сократить код сокращения?

ответ

3

Прежде всего, в первом примере,

if(username != null && username.length() >= 4) 

проверки null не является необходимым. Spring вернет код состояния 400, если @RequestParam не может быть разрешен.

можно преобразовать мои аргументы из запроса POST в класс? Если это возможно, что требуется?

Да, создайте класс, возможно, ваш класс User, в котором есть поля с тем же именем, что и параметры запроса. Сделайте способ вашего обработчика принять параметр этого класса.

public String addAccoundPOST(@ModelAttribute User user) 

Если вы хотите проверить его, просто добавьте @Valid.

public String addAccoundPOST(@Valid @ModelAttribute User user) 
+0

Что делать, если одним из параметров является дата, нужны некоторые аннотации или что-то еще? – kris14an

+0

@ kris14an Посмотрите на '@ DateTimeFormat'. –

+0

ОК, он работает! благодаря! – kris14an

Смежные вопросы