×÷Õߣº¾©¶«ÎïÁ÷ ñûÓñ½Ü
1. ¼ò½é
Graceful ResponseÊÇÒ»¸öSpring BootÌåϵϵÄÓÅÑÅÏìÓ¦´¦ÀíÆ÷£¬Ìṩһվʽͳһ·µ»ØÖµ·â×°¡¢Òì³£´¦Àí¡¢Òì³£´íÎóÂëµÈ¹¦ÄÜ¡£
ʹÓÃGraceful Response½øÐÐweb½Ó¿Ú¿ª·¢²»½ö¿ÉÒÔ½ÚÊ¡´óÁ¿µÄʱ¼ä£¬»¹¿ÉÒÔÌá¸ß´úÂëÖÊÁ¿£¬Ê¹´úÂëÂß¼¸üÇåÎú¡£
Ç¿ÁÒÍƼöÄ㻨3·ÖÖÓѧ»áËü£¡
Graceful ResponseµÄGithubµØÖ·£º https://github.com/feiniaojin/graceful-response £¬»¶Óstar£¡
Graceful ResponseµÄ°¸Àý¹¤³Ì´úÂ룺https://github.com/feiniaojin/graceful-response-example.git
2. Spring Boot Web API½Ó¿ÚÊý¾Ý·µ»ØµÄÏÖ×´
ÎÒÃǽøÐÐSpring Boo Web API½Ó¿Ú¿ª·¢Ê±£¬Í¨³£´ó²¿·ÖµÄController´úÂëÊÇÕâÑùµÄ£º
public class Controller {
@GetMapping("/query")
@ResponseBody
public Response query(Parameter params) {
Response res = new Response();
try {
//1.УÑéparams²ÎÊý£¬·Ç¿ÕУÑé¡¢³¤¶ÈУÑé
if (illegal(params)) {
res.setCode(1);
res.setMsg("error");
return res;
}
//2.µ÷ÓÃServiceµÄһϵÁвÙ×÷
Data data = service.query(params);
//3.Ö´ÐÐÕýȷʱ£¬½«²Ù×÷½á¹ûÉèÖõ½res¶ÔÏóÖÐ
res.setData(data);
res.setCode(0);
res.setMsg("ok");
return res;
} catch (BizException1 e) {
//4.Òì³£´¦Àí£ºÒ»¶Ñ³óªµÄtry...catch£¬Èç¹ûÓдíÎóÂëµÄ£¬»¹ÐèÒªÊÖ¹¤Ìî³ä´íÎóÂë
res.setCode(1024);
res.setMsg("error");
return res;
} catch (BizException2 e) {
//4.Òì³£´¦Àí£ºÒ»¶Ñ³óªµÄtry...catch£¬Èç¹ûÓдíÎóÂëµÄ£¬»¹ÐèÒªÊÖ¹¤Ìî³ä´íÎóÂë
res.setCode(2048);
res.setMsg("error");
return res;
} catch (Exception e) {
//4.Òì³£´¦Àí£ºÒ»¶Ñ³óªµÄtry...catch£¬Èç¹ûÓдíÎóÂëµÄ£¬»¹ÐèÒªÊÖ¹¤Ìî³ä´íÎóÂë
res.setCode(1);
res.setMsg("error");
return res;
}
}
}
Õâ¶Î´úÂë´æÔÚʲôÎÊÌâÄØ£¿ÕæÕýµÄÒµÎñÂß¼±»ÈßÓà´úÂëÑÍû£¬¿É¶ÁÐÔÌ«²î¡£
ÕæÕýÖ´ÐÐÒµÎñµÄ´úÂëÖ»ÓÐ
Data data=service.query(params);
ÆäËû´úÂë²»¹ÜÊÇÕý³£Ö´Ðл¹ÊÇÒì³£´¦Àí£¬¶¼ÊÇΪÁËÒì³£·â×°¡¢°Ñ½á¹û·âװΪÌض¨µÄ¸ñʽ£¬ÀýÈçÒÔϸñʽ£º
{
"code": 0,
"msg": "ok",
"data": {
"id": 1,
"name": "username"
}
}
ÕâÑùµÄÂ߼ÿ¸ö½Ó¿Ú¶¼ÐèÒª´¦ÀíÒ»±é£¬¶¼ÊÇ·±ËöµÄÖظ´ÀͶ¯¡£
ÏÖÔÚ£¬Ö»ÐèÒªÒýÈëGraceful Response×é¼þ²¢Í¨¹ý@EnableGracefulResponseÆôÓ㬾ͿÉÒÔÖ±½Ó·µ»ØÒµÎñ½á¹û²¢×Ô¶¯Íê³ÉresponseµÄ¸ñʽ·â×°¡£
ÒÔÏÂÊÇʹÓÃGraceful ResponseÖ®ºóµÄ´úÂ룬ʵÏÖͬÑùµÄ·µ»ØÖµ·â×°¡¢Òì³£´¦Àí¡¢Òì³£´íÎóÂ빦ÄÜ£¬µ«¿ÉÒÔ¿´µ½´úÂë±äµÃ·Ç³£¼ò½à£¬¿É¶ÁÐԷdz£Ç¿¡£
public class Controller {
@GetMapping("/query")
@ResponseBody
public Data query(Parameter params) {
return service.query(params);
}
}
3. ¿ìËÙÈëÃÅ
3.1 ÒýÈëmavenÒÀÀµ
graceful-responseÒÑ·¢²¼ÖÁmavenÖÐÑë²Ö¿â£¬¿ÉÒÔÖ±½ÓÒýÈëµ½ÏîÄ¿ÖУ¬mavenÒÀÀµÈçÏ£º
<dependency>
<groupId>com.feiniaojin</groupId>
<artifactId>graceful-response</artifactId>
<version>2.0</version>
</dependency>
3.2 ÔÚÆô¶¯ÀàÖÐÒýÈë@EnableGracefulResponse×¢½â
@EnableGracefulResponse
@SpringBootApplication
public class ExampleApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class, args);
}
}
3.3 Controller·½·¨Ö±½Ó·µ»Ø½á¹û
? ÆÕͨµÄ²éѯ
@Controller
public class Controller {
@RequestMapping("/get")
@ResponseBody
public UserInfoView get(Long id) {
log.info("id={}", id);
return UserInfoView.builder().id(id).name("name" + id).build();
}
}
UserInfoViewµÄÔ´Â룺
@Data
@Builder
public class UserInfoView {
private Long id;
private String name;
}
Õâ¸ö½Ó¿ÚÖ±½Ó·µ»ØÁË UserInfoView
µÄʵÀý¶ÔÏ󣬵÷ÓýӿÚʱ£¬Graceful Response½«×Ô¶¯·âװΪÒÔϸñʽ£º
{
"status": {
"code": "0",
"msg": "ok"
},
"payload": {
"id": 1,
"name": "name1"
}
}
¿ÉÒÔ¿´µ½UserInfoView
±»×Ô¶¯·â×°µ½payload×Ö¶ÎÖС£
Graceful ResponseÌṩÁËÁ½ÖÖ·ç¸ñµÄResponse£¬¿ÉÒÔͨ¹ýÔÚapplication.propertiesÎļþÖÐÅäÖÃgr.responseStyle=1£¬½«ÒÔÒÔϵĸñʽ½øÐзµ»Ø£º
{
"code": "0",
"msg": "o