如何定义简单加签名规范接口

如何定义规范http接口:
先来查看Controller:

package com.song.lamborghini.controller;


import com.alibaba.fastjson.JSONObject;
import com.song.lamborghini.vo.err.err.BizException;
import com.song.lamborghini.vo.reponse.UploadUserResponse;
import com.song.lamborghini.vo.request.UploadUserRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Slf4j
@RestController
@RequestMapping(value = "/api")
public class InterfaceController {
    @PostMapping("/pbase/userupload")
    public Object userUpload(@RequestBody List<UploadUserRequest> uploadUserRequestList){
        try {
            if(uploadUserRequestList.size()>100) return UploadUserResponse.errorMessage("长度超过100");
            for(UploadUserRequest uploadUserRequest:uploadUserRequestList) {
                if (StringUtils.isEmpty(uploadUserRequest.getCode())) {
                    throw new BizException("员工编码不能为空");
                }
                if (StringUtils.isEmpty(uploadUserRequest.getName())) {
                    throw new BizException("员工姓名不能为空");
                }
                if (StringUtils.isEmpty(uploadUserRequest.getUserType())) {
                    throw new BizException("员工类型不能为空");
                }
                String regex = "^(12|13|14|15|16|17|18|19)[0-9]{9}$";
                if (!StringUtils.isEmpty(uploadUserRequest.getMobileNo())) {
                    Pattern p = Pattern.compile(regex);
                    Matcher m = p.matcher(uploadUserRequest.getMobileNo());
                    boolean isMatch = m.matches();
                    if (!isMatch) {
                        throw new BizException("姓名:"+uploadUserRequest.getName()+",手机号" + uploadUserRequest.getMobileNo() + "是错误格式!!!");
                    }
                }
            }
            return UploadUserResponse.okMessage();
        }catch (BizException e){
            log.error("出现异常:{}",e.toString(),e);
            return UploadUserResponse.errorMessage(e.getMessage());
        }catch (Exception e){
            log.error("出现异常:{}",e.toString(),e);
            return UploadUserResponse.errorMessage();
        }
    }
}

这里验证不规范性:
可以把所有接口的验证通过AOP来进行校验,在Request请求类中,通过@NotNull等注解来进行参数化必填和格式检验

package com.song.lamborghini.vo.request;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@Data
public class UploadUserRequest {
    /**
     * Code : U0001
     * Name : 刘力
     * UserType : 门店用户
     * RoleName : 门店管理员
     * ShopJobType : 店长
     * MobileNo : 13888888888
     * ShopCode : HQS0001
     * PqCode : PQ100
     * GpCode : DQ100
     * MyPqCodes : PQ001,PQ001
     * MyGpCodes : DQ001,DQ002
     */
	@NotBlank(message="编号不能为空")
    @JsonProperty("Code")
    private String Code;
    @JsonProperty("Name")
    private String Name;
    @JsonProperty("UserType")
    private String UserType;
    @JsonProperty("RoleName")
    private String RoleName;
    @JsonProperty("ShopJobType")
    private String ShopJobType;
    @JsonProperty("MobileNo")
    private String MobileNo;
    @JsonProperty("ShopCode")
    private String ShopCode;
    @JsonProperty("PqCode")
    private String PqCode;
    @JsonProperty("GpCode")
    private String GpCode;
    @JsonProperty("MyPqCodes")
    private String MyPqCodes;
    @JsonProperty("MyGpCodes")
    private String MyGpCodes;
}

ps: 可以在Controller方法里面 添加@Validated 注解
public Object userUpload(@RequestBody @Validated List<UploadUserRequest> uploadUserRequestList)
在Controller切面定义个:

@ControllerAdvice
@Slf4j
public class ControllerExceptionHandler {

    @ExceptionHandler({MethodArgumentNotValidException.class})
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public 自己返回基类 handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {
        BindingResult bindingResult = ex.getBindingResult();
        StringBuilder sb = new StringBuilder("参数校验失败:");
        for (FieldError fieldError : bindingResult.getFieldErrors()) {
            sb.append(fieldError.getField()).append(":").append(fieldError.getDefaultMessage()).append(", ");
        }
        return 自己返回基类.errorMessage(sb.toString());
    }

    @ExceptionHandler({Exception.class})
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public 自己返回基类 handleException(Exception ex) {
        log.error("出现系统异常:{}",ex.toString(),ex);
        return 自己返回基类.errorMessage("系统异常,请稍候重试!");
    }

    @ExceptionHandler({BizException.class})
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public 自己返回基类 bizException(自定义业务异常 ex) {
        log.error("出现系统业务异常:{}",ex.toString(),ex);
        return new 自己返回基类(ex);
    }
}
package com.song.lamborghini.vo.reponse;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class UploadUserResponse {


    /**
     * Status : true
     * StatusCode : 200
     * Msg : 成功
     * Timestamp : 20150622093101
     * Sign : 6ECC9BF07C69E80F6D8552FF7B2E7A8FCA2CC80E
     * Result : 见业务返回结果示例
     */

    private Boolean Status;
    private Integer StatusCode;
    private String Msg;
    private String Timestamp;
    private String Sign;
    private String Result;

    public static UploadUserResponse okMessage(){
	    //调用统一参数遍历然后加签名
	    //String sign = Utils.addParamSign(Object);
        return UploadUserResponse.builder().Status(true).StatusCode(200).Msg("成功").Timestamp("20150622093101")
                .Sign(sign)
                .Result("见业务返回结果示例").build();
    }

    public static UploadUserResponse errorMessage(){
        return UploadUserResponse.builder().Status(false).StatusCode(999).Msg("失败").Timestamp("20150622093101")
                .Sign("6ECC9BF07C69E80F6D8552FF7B2E7A8FCA2CC80E")
                .Result("见业务返回结果示例").build();
    }

    public static UploadUserResponse errorMessage(String errorMessage){
        return UploadUserResponse.builder().Status(false).StatusCode(999).Msg("失败:"+errorMessage).Timestamp("20150622093101")
                .Sign("6ECC9BF07C69E80F6D8552FF7B2E7A8FCA2CC80E")
                .Result("见业务返回结果示例").build();
    }
}

加返回参数签名,应该是在统一返回参数里面去加。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值