ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

һվʽͳһ·µ»ØÖµ·â×°¡¢Òì³£´¦Àí¡¢Òì³£´íÎóÂë½â¾ö·½°¸¡ª×îÇ¿µÄSping Boot½Ó¿ÚÓÅÑÅÏìÓ¦´¦ÀíÆ÷(¶þ)
2023-07-25 21:26:29 ¡¾´ó ÖРС¡¿ ä¯ÀÀ:66´Î
Tags£º·â×° ³£´¦Àí ³£´íÎó ½â¾ö·½ Ç¿µÄ Sping Boot Ó¦´¦Àí
k", "data": { "id": 1, "name": "name1" } }

Èç¹ûÕâÁ½ÖÖ·ç¸ñÒ²²»ÄÜÂú×ãÐèÒª£¬ÎÒÃÇ»¹¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÐèÒª½øÐÐ×Ô¶¨Òå·µ»ØµÄResponse¸ñʽ¡£Ïêϸ¼û±¾ÎÄ 4.3×Ô¶¨ÒåRespnse¸ñʽ¡£

? Òì³£´¦ÀíµÄ³¡¾°

ͨ¹ýGraceful Response£¬ÎÒÃDz»ÐèҪרÃÅÔÚControllerÖд¦ÀíÒì³££¬Ïêϸ¼û 4.1 Graceful ResponseÒì³£´íÎóÂë´¦Àí¡£

? ·µ»ØֵΪ¿ÕµÄ³¡¾°

ijЩCommandÀàÐ͵ķ½·¨Ö»Ö´ÐÐÐ޸IJÙ×÷£¬²»·µ»ØÊý¾Ý£¬Õâ¸öʱºòÎÒÃÇ¿ÉÒÔÖ±½ÓÔÚControllerÖзµ»Øvoid£¬Graceful Response»á×Ô¶¯·âװĬÈϵIJÙ×÷³É¹¦Response±¨ÎÄ¡£

@Controller
public class Controller {
    @RequestMapping("/void")
    @ResponseBody
    public void testVoidResponse() {
        //Ê¡ÂÔÒµÎñ²Ù×÷
    }
}

testVoidResponse·½·¨µÄ·µ»Øʱvoid£¬µ÷ÓÃÕâ¸ö½Ó¿Úʱ£¬½«·µ»Ø£º

{
  "status": {
    "code": "200",
    "msg": "success"
  },
  "payload": {}
}

3.4 Service·½·¨ÒµÎñ´¦Àí

ÔÚÒýÈëGraceful Responseºó£¬Service²ãµÄ·½·¨µÄ¿É¶ÁÐÔ¿ÉÒԵõ½¼«´óµÄÌáÉý¡£

? ½Ó¿ÚÖ±½Ó·µ»ØÒµÎñÊý¾ÝÀàÐÍ£¬¶ø²»ÊÇResponse£¬¸ü¾ß±¸¿É¶ÁÐÔ

public interface ExampleService {
    UserInfoView query1(Query query);
}

? Service½Ó¿ÚʵÏÖÀàÖУ¬Ö±½ÓÅ××Ô¶¨ÒåµÄÒµÎñÒì³££¬Graceful Response½«Æäת»¯Îª·µ»Ø´íÎóÂëºÍ´íÎóÌáʾ

public class ExampleServiceImpl implements ExampleService {
    @Resource
    private UserInfoMapper mapper;

    public UserInfoView query1(Query query) {
        UserInfo userInfo = mapper.findOne(query.getId());
        if (Objects.isNull(userInfo)) {
           //ÕâÀïÖ±½ÓÅ××Ô¶¨ÒåÒì³££¬Ò쳣ͨ¹ý@ExceptionMapperÐÞÊΣ¬ÌṩÒì³£ÂëºÍÒì³£Ìáʾ
           throw new NotFoundException();
        }
        // Ê¡ÂÔºóÐøÒµÎñ²Ù×÷
    }
}


/**
 * NotFoundExceptionµÄ¶¨Ò壬ʹÓÃ@ExceptionMapper×¢½âÐÞÊÎ
 * code:´ú±í½Ó¿ÚµÄÒì³£Âë
 * msg:´ú±í½Ó¿ÚµÄÒì³£Ìáʾ
 */
@ExceptionMapper(code = "1404", msg = "ÕÒ²»µ½¶ÔÏó")
public class NotFoundException extends RuntimeException {

}
//Controller²»ÔÙ²¶»ñ´¦ÀíÒì³£
@RequestMapping("/get")
@ResponseBody
public UserInfoView get(Query query)) {
    return exampleService.query1(query);
}

µ±Service·½·¨Å׳öNotFoundExceptionÒ쳣ʱ£¬½Ó¿Ú½«Ö±½Ó·µ»Ø´íÎóÂ룬²»ÐèÒªÊÖ¹¤set£¬¼«´óµØ¼ò»¯ÁËÒì³£´¦ÀíÂß¼­¡£

{
  "status": {
    "code": "1404",
    "msg": "ÕÒ²»µ½¶ÔÏó"
  },
  "payload": {}
}

ÑéÖ¤£ºÆô¶¯example¹¤³Ìºó£¬ÇëÇóhttp://localhost:9090/example/notfound

4. ½ø½×Ó÷¨

4.1 Graceful ResponseÒì³£´íÎóÂë´¦Àí

ÒÔÏÂÊÇʹÓÃGraceful Response½øÐÐÒì³£¡¢´íÎóÂë´¦ÀíµÄ¿ª·¢²½Öè¡£

? ´´½¨×Ô¶¨ÒåÒì³£

ͨ¹ý¼Ì³ÐRuntimeExceptionÀà´´½¨×Ô¶¨ÒåµÄÒì³££¬²ÉÓà @ExceptionMapper×¢½âÐÞÊΣ¬×¢½âµÄ codeÊôÐÔΪ·µ»ØÂ룬msgÊôÐÔΪ´íÎóÌáʾÐÅÏ¢¡£

¹ØÓÚÊǼ̳ÐRuntimeException»¹ÊǼ̳ÐException£¬¶ÁÕß¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿öȥѡÔñ£¬Graceful Response¶ÔÁ½Õ߶¼Ö§³Ö¡£

@ExceptionMapper(code = "1007", msg = "ÓÐÄÚ¹í£¬ÖÕÖ¹½»Ò×")
public static final class RatException extends RuntimeException {

}

? ServiceÖ´ÐоßÌåÂß¼­

ServiceÖ´ÐÐÒµÎñÂß¼­µÄ¹ý³ÌÖУ¬ÐèÒªÅ×Òì³£µÄʱºòÖ±½ÓÅ׳öÈ¥¼´¿É¡£ÓÉÓÚÒѾ­Í¨¹ý@ExceptionMapper¶¨ÒåÁ˸ÃÒì³£µÄ´íÎóÂ룬ÎÒÃDz»ÐèÒªÔÙµ¥¶ÀµÄά»¤Òì³£Âëö¾ÙÓëÒì³£ÀàµÄ¹Øϵ¡£

//Service²ãα´úÂë
public class Service {
    public void illegalTransaction() {
        //ÐèÒªÅ×Òì³£µÄʱºòÖ±½ÓÅ×
        if (check()) {
            throw new RatException();
        }
        doIllegalTransaction();
    }
}

Controller²ãµ÷ÓÃService²ãα´úÂ룺

public class Controller {
    @RequestMapping("/test3")
    public void test3() {
        //ControllerÖв»»á½øÐÐÒì³£´¦Àí£¬Ò²²»»áÊÖ¹¤set´íÎóÂ룬ֻ¹ØÐĺËÐIJÙ×÷£¬ÆäËûµÄͳͳ½»¸øGraceful Response
        exampleService.illegalTransaction();
    }
}

ÔÚä¯ÀÀÆ÷ÖÐÇëÇócontrollerµÄ/test3·½·¨£¬ÓÐÒ쳣ʱ½«»á·µ»Ø£º

{
  "status": {
    "code": "1007",
    "msg": "ÓÐÄÚ¹í£¬ÖÕÖ¹½»Ò×"
  },
  "payload": {
  }
}

4.2 ÍⲿÒì³£±ðÃû

°¸Àý¹¤³Ì( https://github.com/feiniaojin/graceful-response-example.git )Æô¶¯ºó£¬ ͨ¹ýä¯ÀÀÆ÷·ÃÎÊÒ»¸ö²»´æÔڵĽӿڣ¬ÀýÈç http://localhost:9090/example/get2?id=1

Èç¹ûû¿ªÆôGraceful Response£¬½«»áÌøתµ½404Ò³Ã棬Ö÷ÒªÔ­ÒòÊÇÓ¦ÓÃÄÚ²¿²úÉúÁË NoHandlerFoundExceptionÒì³£¡£Èç¹û¿ªÆôÁËGraceful Response£¬Ä¬Èϻ᷵»Øcode=1µÄ´íÎóÂë¡£

ÕâÀà·Ç×Ô¶¨Òå

Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 4 ÏÂÒ»Ò³ βҳ 2/4/4
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
ÉÏһƪ£ºSpringMCV£¨°Ë£©£ºÎļþÉÏ´« ÏÂһƪ£ºSpringSecurity£ºOAuth2 Client ..

×îÐÂÎÄÕÂ

ÈÈÃÅÎÄÕÂ

Hot ÎÄÕÂ

Python

C ÓïÑÔ

C++»ù´¡

´óÊý¾Ý»ù´¡

linux±à³Ì»ù´¡

C/C++ÃæÊÔÌâÄ¿