'ModelAttribute'에 해당되는 글 1건

  1. [Spring MVC 3] HTTP Request Parameter 다루기

[Spring MVC 3] HTTP Request Parameter 다루기

클라이언트로부터 요청받은 파라메터가 아래와 같다고 가정

page=1
pageSize=10
sort[0][field]="FACTORYNAME"
sort[0][dir]="desc"


Controller에서 파라메터를 받을 Model 클래스를 작성

public class SomeModel {
  private int page;
  private int pageSize;
  private String sortField;
  private String sortDir;
  // Getters & Setters 메써드 작성
  // toString() 메써드 작성
}


Controller 메써드 작성

@Controller
public class someController {
  @RequestMapping(value = "/doSomething", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
  @ResponseBody
  public Map<String, Object> doSomething(@ModelAttribute SomeModel someModel, @RequestParam(value = "sort[0][field]", required = false) String sortField, @RequestParam(value = "sort[0][dir]", required = false) String sortDir) {
    Map<String, Object> response = new HashMap<String, Object>();
    someModel.setSortField(sortField);
    if (Objects.equal(sortDir, null)) {
      someModel.setSortDir(sortDir);
    } else {
      someModel.setSortDir(sortDir.toUpperCase());
    }
    List<Map<String, Object>> data = someService.doSomething(someModel);
    response.put("data", data);
    if (Objects.equal(data.size(), 0)) {
      response.put("total", 0);
    } else {
      response.put("total", data.get(0).get("TOTAL_ROW_COUNT"));
    }
    return response;
  }


예제 설명

* Spring MVC 3에서 컨트롤러는 각각의 HTTP 요청 파라메터를 @RequestParam을 통해 Java 기본 타입 변수에 담을 수 있음
* 보다 편리한 방법으로 여러 파라메터들을 @ModelAttribute를 통해 미리 정의된 모델 클래스에 한꺼번에 담을 수 있음
* @RequestParam의 속성 required = false로 정의하면 파라메터가 전달되지 않아도 변수에 null로 담겨짐
* 모델 클래스에 정의되어 있지만 전달되지 않은 파라메터는 변수에 null로 담겨짐
* sort[0][field]와 같이 List<Object> 형태의 파라메터는 @ModelAttribute를 통해 담을 수 없음(.NET에서는 가능)
* sort[0].field와 같이 전달되어야 @ModelAttribute로 담는 것이 가능
* 따라서 @RequestParam을 통해 개별 변수에 담은 후 모델 클래스에 대입하는 번거로운 방법 사용
* 위 예제에 사용된 Objects 클래스는 Google Guava 라이브러리가 제공하는 유틸리티 클래스


참고자료


저작자 표시 비영리 동일 조건 변경 허락
신고