SSM 통합 및 기능 모듈 개발이 완료된 후, 다음에는 위의 사례를 바탕으로 어떤 문제를 해결해야 하는지 분석하겠습니다. 우선 첫 번째 질문은
Controller 계층에서 데이터를 추가, 삭제, 수정하면 불리언 형태의 데이터가 프런트 엔드로 반환됩니다.
Controller 계층에서 단일 객체를 쿼리할 때, 프런트엔드로 반환된 개체는
컨트롤러 계층에서 쿼리할 때 모든 개체가 반환됩니다. 프런트엔드는 컬렉션 개체
현재 프런트엔드로 반환되는 데이터 유형은 세 가지입니다. 비즈니스가 성장함에 따라 점점 더 많은 데이터 유형을 반환해야 합니다. 프론트엔드 개발자의 경우 데이터를 파싱할 때 상당히 지저분하기 때문에 프론트엔드의 경우 백그라운드에서 통합된 데이터 결과를 반환할 수 있다면 프론트엔드에서는 파싱할 때 한 가지 방식으로 파싱할 수 있습니다. 개발이 더 쉬워질 것입니다.
반환된 결과 데이터를 통합할 수 있는지 궁금합니다. 구체적으로 어떻게 해야 할까요? 일반적인 아이디어는 다음과 같습니다.
반환된 결과 데이터를 캡슐화하려면: 결과 모델 클래스를 만들고 데이터를 데이터에 캡슐화합니다. attribute
반환된 데이터가 어떤 작업인지, 작업 성공 여부를 캡슐화하려면: 작업 결과를 코드에 캡슐화합니다 attribute
작업 실패 후 반환되는 오류 메시지를 캡슐화하려면: 캡슐화 메시지(msg) 속성의 특수 메시지
분석을 바탕으로 통합 데이터 반환 결과 클래스를 설정할 수 있습니다
public class Result{ private Object data; private Integer code; private String msg; }
참고: 결과 클래스 이름과 클래스의 필드는 고정되지 않습니다. 필요에 따라 늘리거나 줄일 수 있어 다양한 구성 방법을 제공하여 편리한 작업이 가능합니다.
결과 캡슐화를 위해서는 프리젠테이션 레이어에서 처리해야 하므로 결과 클래스를 컨트롤러 패키지 아래에 넣을 수도 있습니다. 결과 캡슐화를 구현하는 방법은 다음과 같습니다.
1단계: 결과 클래스 만들기
public class Result { //描述统一格式中的数据 private Object data; //描述统一格式中的编码,用于区分操作,可以简化配置0或1表示成功失败 private Integer code; //描述统一格式中的消息,可选属性 private String msg; public Result() { } //构造方法是方便对象的创建 public Result(Integer code,Object data) { this.data = data; this.code = code; } //构造方法是方便对象的创建 public Result(Integer code, Object data, String msg) { this.data = data; this.code = code; this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } @Override public String toString() { return "Result{" + "data=" + data + ", code=" + code + ", msg='" + msg + '\'' + '}'; } }
참고:
toString 메서드를 작성할 필요는 없습니다. 결국 json 형식으로 변환됩니다. 하지만 getter 및 setter 메서드가 있어야 합니다!
2단계: 반환 코드 코드 클래스 정의
//状态码 public class Code { public static final Integer SAVE_OK = 20011; public static final Integer DELETE_OK = 20021; public static final Integer UPDATE_OK = 20031; public static final Integer GET_OK = 20041; public static final Integer SAVE_ERR = 20010; public static final Integer DELETE_ERR = 20020; public static final Integer UPDATE_ERR = 20030; public static final Integer GET_ERR = 20040; }
참고: 코드 클래스의 상수 디자인은 고정되지 않으며 필요에 따라 늘리거나 줄일 수 있습니다. 예를 들어 쿼리는 GET_OK, GET_ALL_OK, GET_PAGE_OK로 세분화됩니다. 등.
3단계: 컨트롤러 클래스의 반환 값 수정
//统一每一个控制器方法返回值 @RestController @RequestMapping("/books") public class BookController { @Autowired private BookService bookService; @PostMapping public Result save(@RequestBody Book book) { boolean flag = bookService.save(book); return new Result(flag ? Code.SAVE_OK:Code.SAVE_ERR,flag); } @PutMapping public Result update(@RequestBody Book book) { boolean flag = bookService.update(book); return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag); } @DeleteMapping("/{id}") public Result delete(@PathVariable Integer id) { boolean flag = bookService.delete(id); return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERR,flag); } @GetMapping("/{id}") public Result getById(@PathVariable Integer id) { Book book = bookService.getById(id); Integer code = book != null ? Code.GET_OK : Code.GET_ERR; String msg = book != null ? "" : "数据查询失败,请重试!"; return new Result(code,book,msg); } @GetMapping public Result getAll() { List<Book> bookList = bookService.getAll(); Integer code = bookList != null ? Code.GET_OK : Code.GET_ERR; String msg = bookList != null ? "" : "数据查询失败,请重试!"; return new Result(code,bookList,msg); } }
여기에서 bookList를 null과 비교하는 이유는 모든 쿼리에서 결과가 발견되지 않으면 빈 목록 대신 null이 직접 반환되기 때문입니다!
ID를 기준으로 책을 확인할 때 찾을 수 없으면 null도 반환됩니다.
마지막으로 프로젝트 구조:
4단계: 서비스 테스트 시작
반품 결과 이미 통합된 형식이 프런트 엔드에 반환될 수 있습니다. 반환된 결과에 따라 프런트 엔드는 먼저 code
,根据code判断,如果成功则取data
属性的值,如果失败,则取msg
의 값을 프롬프트로 가져옵니다.
위 내용은 Java SSM 통합 개발 통합 결과 캡슐화 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!