장면
우리 팀은 이제 다중 터미널 데이터 인터페이스 도킹 문제에 직면하고 있습니다. 이 문제를 해결하기 위해 인터페이스 도킹의 사양을 정의했습니다.
프론트 엔드 (Android, iOS, 웹 프론트 엔드) 및 백엔드는 데이터 형식 사양에 대해 논의하고 JSON의 데이터 형식을 결정했습니다.
{ "code": "200", "data": { "": ""}, "message": "성공적으로 처리 된"} { "code": "300", "data": { "": ""}, "message": "이 사용자"}코드는 요청 처리 상태를 나타냅니다. 200은 정상 처리, 300은 비즈니스 예외 처리, 500은 시스템 예외 처리 처리입니다.
데이터는 백그라운드에서 반환 된 데이터를 나타냅니다.
메시지 배경 프롬프트는 정상이거나 성공할 때 오류 이유를 반환합니다.
문제는 여기에 있습니다
모든 사람이 각 JSON보기의 반환 값을 감싸도록하는 것이 매우 번거롭지 않습니까?
현재 AOP가 출시됩니다. 요청이 클라이언트에게 응답되기 전에 요청이 JSON으로 돌아올 때 AOP 아이디어를 사용하여 레이어에 래핑 할 수 있습니다.
구현 단계
AOP를 활성화합니다
<!-기본 패키지가 다중, ",", "-> <context : component-scan base-package ="com.we, cn.isuyang "> <context : conturefilter type ="주석 "expression ="org.springframework.stereotyp.service " /> 컨텍스트 : 제외 필터 유형 ="Annotation " expression = "org.springframework.stereotype.controller" /> < /context : component-scan> <!-열린 aop 주석-> <aop : agagj-autoproxy />
섹션을 만듭니다
/*** JSON은 탄젠트 얼굴을 반환합니다* <p>* JSON은 결과를 반환합니다* @Author Zhuangjunxiang ([email protected])* @date 2017 년 4 월 28 일* /@component@order@order (2) jsonrereturnaspect (2) jsonreturnasppect { /*** <paging**가 설정되지 않은 경우** <paging** 기본적으로 시스템의 구성 파일** @param pjp 탄젠트 포인트*/ @around (value = "@annotation (org.springframework.web.bind.annotation.responsebody)") @Order (1) public object warp (최종 ProceedingBoinPoint PJP) 던지기 가능 {object list = pjp.proceed (); if (isreturnVoid (pjp)) {httpservletResponse response = ((servletRequestAttributes) requestContexTholder.getRequestAttributes () .getResponse (); if (isnedwrap (pjp)) {response.getwriter (). 쓰기 (jsonutil.tojson (성공 ( "조작 성공"))); } 반환 목록; } 반환 데이터 (목록); } / ** * * @param pjp 탄젠트 포인트 * * @return true 필요하지 않음을 의미합니다 * / private boolean isneedwrap (최종 절차 JoinPoint PJP) {method method = sageputil.getMethod (pjp); return! method.isannotationpresent (void.class); } / ** * 반환할지 여부 * * @param pjp * @return true : 반환 유형은 무효입니다. class <?> returnType = method.getReturnType (); return "void".equals (returnType.getName ()); } / *** 성공적인 구성 후 객체를 반환* <p>* 메시지가 비어 있으면 프롬프트가 표시되지 않으며, 비어 있지 않으면 비어 있지 않으면** @param 메시지 성공 메시지* @return json 객체* / public static map <string, object> success (최종 문자열 메시지) {map <string, object> map = maputil.map (); map.put ( "code", statuscode.success.key ()); map.put ( "메시지", 메시지); map.put ( "data", "); return map;} / *** 성공적인 구성 후 객체를 반환* <p>* 메시지가 비어있을 때, 메시지가 비어 있거나 빈 프롬프트가없고, 프롬프트가없고, 프롬프트가없고, @param 메시지 성공 메시지* @return JSON 객체* / public static map <string, object> data (최종 객체 데이터) {map <string, object = maputil.map (); Map.put ("Code ", wication"); map.put ( "message", map.put);
분석하십시오
@Component이 주석은이 개체를 인스턴스화를 위해 스프링 컨테이너로 넘겨주는 것을 의미합니다.
@aspect는 이것이 패싯 클래스임을 의미합니다
@Around(value = "@annotation(org.springframework.web.bind.annotation.ResponseBody)")
이는 @ResponseBody 주석이있는 모든 방법 이이 섹션의 중간 지점이라는 것을 의미합니다. 즉, 차단됩니다.
알아채다:
Warp 메소드의 ProceedingBoinPoint 매개 변수는 주변 알림에 의해서만 JoinPoint 서브 클래스 ProceedingJoinPoint 만 사용할 수 있습니다.
각 연결 지점 유형은 프록시 방법을 호출하고 반환 값을 얻고 변경할 수 있습니다. 그렇지 않으면 joinpoint를 사용하는 것입니다.
사례 1 : 컨트롤러 클래스의 함수에 반환 값이 필요하지 않다고 가정합니다.
예를 들면 : 엔티티 객체를 업데이트 할 때 업데이트 결과를 반환하면 괜찮으며 데이터를 작성할 필요가 없습니다.
반환 된 데이터 형식 :
{ "code": "200", "data": "", "message": "성공적으로 처리"}구현 아이디어 :
측면 처리 클래스의 처리 함수 에서이 함수의 반환 값 유형을 가져옵니다. 무효 인 경우 지정된 형식으로 데이터를 반환합니다.
위의 isreturnVoid ()는 이와 같은 판단입니다.
함수의 반환 값을 무효로 변경하면됩니다.
@requestmapping@responsebodpublic void add (long matchid, model model) {slxSignUpViewService.setAddInfo (matchid, model);}사례 2 : 컨트롤러 클래스에서 함수의 반환 값을 포장 할 필요가 없다고 가정합니다.
예를 들어:
일부 프론트 엔드 플러그인 및 타사 도킹 (지불)의 반환 값이 지정됩니다.
파일을 다운로드하면 중복됩니다.
구현 아이디어 :
@Void에 대한 주석을 맞춤 설정하십시오.
/*** 빈 주석* <p>* 컨트롤러 계층의 반환 값을** @author wangsen ([email protected])* @date 2017 년 8 월 17 일*/@target ({elegementtype.method})@retentionpolicy.runtime voubledpublic @interbubmentedpublicedpublicedpublice
이 주석을 컨트롤러 계층 메소드에 추가하십시오
/*** 결제 완료*/@void@responskBody@requestMappingPublic void payfinish ()는 ioException {alipayViewService.PayFinish ();}이 기능 에이 섹션 처리 클래스 에서이 주석이 포함되어 있는지 확인하십시오.
그런 다음 처리되지 않고 그대로 반환됩니다.
jsonreturnaspect 클래스의 isnedwrap () 메소드는이 요구 사항을 처리합니다.
요약
위는 귀하에게 소개 된 Custom Spring MVC의 JSON View 구현 아이디어에 대한 분석입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!