2014-11-27 3 views
2

У меня есть такой метод весной контроллерКак пометить Spring MVC Params в соответствии с требованиями

@RequestMapping(value = "/updateArticle", method = RequestMethod.POST) 
@ResponseBody 
public void updateArticle(Long id, String name, String description) { 
    ... 
} 

Я хочу идентификатор, и имя, которое будет ТРЕБУЕТСЯ. Другими словами, если они являются нулевыми значениями, то необходимо исключить исключение.

Как я могу это сделать? Есть ли аннотация для этого или что-то в этом роде?

Thanks

ответ

3

Да, есть. @RequestParam(required=true) См. docs.

Обязательный флаг верно даже по умолчанию, поэтому все, что вам нужно сделать, это:

@RequestMapping(value = "/updateArticle", method = RequestMethod.POST) 
@ResponseBody 
public void updateArticle(@RequestParam Long id, @RequestParam String name, @RequestParam String description) { 
    ... 
} 
+0

Могу ли я подтвердить, что он тоже не является нулевым? или не быть пробелом? – grep

+0

Невозможно передать _null_ в качестве параметра запроса. Давать, допустим, '? Name =' будет результат с пустой строкой, назначенной для имени. Для более сложной проверки вам нужно будет использовать ответ от @blackpanther plus, возможно, реализовать пользовательский javax.validation.ConstraintValidator (некоторые весенние документы [здесь] (http://docs.spring.io/spring/previews/validation.html)) – macias

+0

еще раз спасибо. Весна имеет org.springframework.validation.Validator для этого. это хорошо, но я должен создать новый класс с параметрами, мне не нравится этот стиль кодирования. это все. Я не хочу создавать новый класс для параметров ... – grep

2

Я предполагаю, что вы передаете форму этому контроллеру. Поэтому преобразуйте все поля формы в объект Form, а затем вы можете использовать проверки Java на них. Так, например, у вас есть идентификатор, имя и описание полей в форме:

import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 

public class ArticleForm { 

    @NotNull 
    private Long id; 

    @Size(min = 2, max = 20) 
    private String name; 

    @Size(min =2, max =20) 
    private String description; 

    // getters and setters 
} 

Затем в контроллере:

@RequestMapping(value = "/updateArticle", method = RequestMethod.POST) 
@ResponseBody 
public void updateArticle(@Valid ArticleForm articleForm) { 
     // do something with the article form object using getters and this retrieves 
     // values sent in the HTTP Form 
} 
+0

Хотя правильный подход не соответствует требованиям OP. Он не генерирует исключение, скорее собирает информацию о нарушении ограничений – grid

+0

@grid фактически нет, если пользователь не поместил имя в форму, будет выбрано исключение. И кроме того, если это правильный подход, то не следует ли это быть образцом - это часть хорошей практики и дизайна. – blackpanther

+0

это зависит от того, как вы используете JSR 303 api, или как он интегрируется с вашей каркасом. Когда вы интегрированы с spring-mvc, у вас нет никакого исключения, поднимающегося вверх по afaik. Это происходит при использовании с Jpa. Вопрос задает вопрос о проверке параметров запроса, хотя пример использования, по-вашему, более правильно разрешен вашим ответом и забыл об исключении – grid

2

Вы должны добавить RequestParam с требуемой истинной аннотацией в контроллере

@RequestMapping(value = "/updateArticle", method = RequestMethod.POST) 
@ResponseBody 
public void updateArticle(@RequestParam(value="id",required=true) long id,@RequestParam(value="name",required=true) String name, @RequestParam(value="description",required=true) String description) { 
    ... 
} 

Когда вы ударите этот URL-адрес контроллера из браузера, и если один из параметров является миссией, вы получите incorrect syntax error в браузере

2
@RequestMapping (value = "/gethomeworkinfo.json", method = {RequestMethod.GET, RequestMethod.POST}, produces = "application/json") 
public @ResponseBody 
HomeworkReport getHomeworkReportInfo(@RequestParam (value = "schoolid", required = false) String schoolId, @RequestParam (value = "homeworkid") String homeworkId, 
     @RequestParam (value = "startdate", required = false, defaultValue = "2014-06-01") @DateTimeFormat (pattern = "yyyy-MM-dd") Date startdate, 
     @RequestParam (value = "enddate", required = false, defaultValue = "2014-12-30") @DateTimeFormat (pattern = "yyyy-MM-dd") Date enddate, 
     @RequestParam (value = "userid", required = false) String userId, HttpServletRequest request) { 

    // some actions 

}

В настоящее время я использую этот метод. Это поможет вам.

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