В последних статьях мы увидели, как получить доступ к параметрам запроса , пути и формы в контроллерах MVC. Этот пост показывает, как несколько параметров могут быть сопоставлены с объектом с помощью аннотации @BeanParam.
Давайте снова используем простую HTML-форму из поста о параметрах формы :
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 | <formaction="submit"method="post">  <label>ID:</label>  <inputtype="text"name="id"/>  <label>Name:</label>  <inputtype="text"name="name"/>  <label>Role:</label>  <selectname="role">    <optionvalue="admin">Admin</option>    <optionvalue="reporter">Reporter</option>    <optionvalue="accountant">Accountant</option>  </select>  <inputtype="submit"/></form> | 
Это определяет простую форму, содержащую два поля ввода текста и меню выбора с тремя опциями.
В предыдущем посте о параметрах формы мы узнали, что мы можем получить доступ к этим параметрам, пометив параметры контроллера с помощью @FormParam.
Однако такой подход обременителен, если форма имеет несколько параметров. В этих ситуациях мы обычно хотим отобразить параметры формы на отдельный объект. @BeanParams помогает нам в этом.
С @BeanParam мы можем написать:
| 1 2 3 4 5 6 | @POST@Path("submit")@ControllerpublicString submit(@BeanParamUser user) {  // use user ..} | 
Класс User выглядит следующим образом:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 | publicclassUser {  @FormParam("id")  privatelongid;  @FormParam("name")  privateString name;  @FormParam("role")  privateRole role;   // getters and setters} | 
Когда вызывается метод контроллера, автоматически создается новый экземпляр User. Поля созданного объекта будут заполнены переданными параметрами формы.
@BeanParam и другие аннотации параметров
Классы, используемые с @BeanParam, не ограничиваются параметрами формы. Все аннотации параметров, показанные в предыдущих сообщениях в блоге ( @QueryParam , @PathParam и т. Д.), Могут использоваться внутри параметров компонента.
Например:
| 1 2 3 4 5 | @GET@Path("/date/{year}/{month}")publicString get(@BeanParamRequestData data) {  ...} | 
| 01 02 03 04 05 06 07 08 09 10 11 12 13 | publicclassRequestData {  @PathParam("year")  privateintyear;  @PathParam("month")  privateintmonth;  @QueryParam("name")  privateString name;  // getters and setters} | 
Если мы сейчас отправим HTTP GET запрос
| 1 | /date/2016/02?name=john | 
значения 2016, 2 и john будут введены в поля year, month и name RequestData.
Краткое резюме
С @BeanParam вы можете вводить параметры запроса в бины. Это особенно полезно, если у вас есть несколько параметров. Внутри параметров бина могут использоваться все остальные аннотации параметров.
- Вы можете найти пример исходного кода на GitHub .
| Ссылка: | Java EE 8 MVC: Работа с параметрами бина от нашего партнера JCG Майкла Шаргага в блоге mscharhag, Programming and Stuff . |