SpringMVC实现REST API


JSON

使用Jackson jar包、@RequestBody、@ResponseBody注解,达到:

1. 请求JSON消息体映射为JAVA对象

2. 返回JAVA对象映射为JSON消息体

Step 1. 导入Jackson jar包:

 

 

Step 2. 在Spring MVC配置中加入annotation-driven,该配置可以确保@RequestBody、@ResponseBody、@Valid(用于请求校验)注解可以被解析生效:

 

 

Step 3. 配置控制器扫描路径:

 

 

 

Step 3. 此时编写Controller,使用@RequestBody、@ResponseBody注解:

 

 

请求校验

请求校验一般包含两个方面的校验:

1. 请求参数的合法性校验,例如格式校验

 该类校验可通过在类定义时使用JSR 303进行数据校验,可使用Hibernate Validator,当数据校验有问题时,将会抛出org.springframework.web.bind.MethodArgumentNotValidException。

2. 业务逻辑校验,例如系统规定网上店铺不可重名

 该类校验,一般通过定制业务规则校验代码实现,可抛出自定义异常。

 

Step 1. 导入Hibernate Validator jar包:

 

 

Step 2. 在REST API交互使用到的类定义中使用JSR 303数据校验注解,例如:

 

 

HTTP Status Code

1. 在Controller的目标方法上通过@ResponseStatus定义成功码,例如需要PUT方法成功时返回204而不是200:

 

 

2. 对于通过定制的业务逻辑校验抛出自定义异常的场景,可以在自定义异常类上加上@ResponseStatus定义Status Code,例如:

 

 

3. 对于JSR 303进行的数据校验,返回的是400 Bad Request异常,这个一般无需额外定制。

4. 由于本例中要实现:

当异常出现时,需要返回具体的错误提示信息给客户端(见“自定义错误”章节),实际上异常发生时返回的HTTP Status Code也是在该章节的自定义ExceptionHandler类中指定的。

自定义错误

由于HTTP Status Code只能给出一个笼统的错误提示,往往在实际项目中,当错误发生时,需要根据不同的错误返回不同的错误信息,一般包含错误码和错误描述。

对于业务规则校验抛出的自定义异常和JSR 303抛出的MethodArgumentNotValidException,可以定制ExceptionHandler类来进行处理,在其中直接返回自定义的ErrorInfo对象或者通过返回Map的方式实现:

 

 

 在上例中,在对应的方法上也加上了@ResponseStatus指定了返回的HTTP Status Code,实际上自定义异常类中使用@ResponseStatus注解标识的HTTP Status Code和JSR 303数据校验未通过时设定的HTTP Status Code,都会在此处被覆盖,如果在此处不设置@Response Status,很不幸将会默认返回表示正确的HTTP Status Code,例如200。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM