티스토리 뷰

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

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 라이브러리가 제공하는 유틸리티 클래스


참고자료


댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함