@Test
public void testPost(){
//conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 接收參數不該該加@ResponseBody
//conn.setRequestProperty("Content-Type", "application/json"); 接收參數必須加@ResponseBody
String url = "http://192.168.40.156:8081/member/change/password/test";
String body = "oldPassword=111111qqq&passwordEnsure=111111qq&password=111111qq";
String result = HttpUtils.post(url,body);
System.out.println("result:" + System.lineSeparator() + result);
Result result1 = JSONObject.parseObject(result,Result.class);
System.out.println("code:"+result1.getStatus().getCode());
System.out.println("statusMsg:"+result1.getStatus().getStatusMsg());
System.out.println("data:"+result1.getData());
}
控制面板輸出:
url:
http://192.168.40.156:8081/member/change/password/test
body:
oldPassword=111111qqq&passwordEnsure=111111qq&password=111111qq
result:
{"status":{"code":500,"statusMsg":"舊登陸密碼必須與原設定密碼一致。"},"data":null}
code:500
statusMsg:舊登陸密碼必須與原設定密碼一致。
data:nulljson
請求地址:
@PostMapping("change/password/test")
//@RequestBody MemberChangePasswordDTO memberChangePasswordDTO 不行
public Result changePasswordTest(MemberChangePasswordDTO memberChangePasswordDTO) {
String mobilePhone = "18211672518";
String oldPassword = memberChangePasswordDTO.getOldPassword();
String password = memberChangePasswordDTO.getPassword();
String passwordEnsure = memberChangePasswordDTO.getPasswordEnsure();
//密碼校驗
//舊密碼驗證
boolean isValidOldPassword = memberService.verifyPassword(oldPassword,mobilePhone);
if(!isValidOldPassword){
return Result.error("舊登陸密碼必須與原設定密碼一致。");
}
//新密碼驗證
if (!Pattern.matches(Constant.REGEX_PASSWORD, password)) {
return Result.error("密碼的長度爲8-16位,由大小寫字母、數字、符號至少兩種組成。");
}
if (!password.equals(passwordEnsure)) {
return Result.error("'確認新密碼'與'新的登陸密碼'所輸入的密碼必須一致。");
}
if(Objects.equals(oldPassword,password)){
return Result.error("新舊密碼相同,無需修改。");
}
int count = memberService.updatePasswordByPhone(mobilePhone, password);
if (count > 0) {
return Result.ok("密碼變動成功");
}
return Result.error("密碼變動失敗");
}
/**
* post請求
*
* @param url 功能和操做
* @param body 要post的數據
*/
public static String post(String url, String body) {
System.out.println("url:" + System.lineSeparator() + url);
System.out.println("body:" + System.lineSeparator() + body);
String result = "";
try {
BufferedReader in = null;
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
// 設置鏈接參數
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setConnectTimeout(5000);
conn.setReadTimeout(20000);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 提交數據
OutputStream out = conn.getOutputStream();
out.write(body.getBytes());
out.flush();
out.close();
// 讀取返回數據
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line = "";
boolean firstLine = true; // 讀第一行不加換行符
while ((line = in.readLine()) != null) {
if (firstLine) {
firstLine = false;
} else {
result += System.lineSeparator();
}
result += line;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
附錄1:返回數據的數據結構
public class Result<T> {
private Status status;
private T data;
public Result() {
}
public static Result ok() {
return new Result(Status.ok());
}
public static <T> Result<T> ok(T data) {
return new Result(Status.ok(), data);
}
public static <T> Result<T> error(String errorMsg) {
return new Result(Status.error(errorMsg));
}
}
public class Status implements StatusConstant {
private int code;
private String statusMsg;
public static Status ok() {
return new Status(SUCCESS, STATUS_OK);
}
public static Status error() {
return new Status(INTERNAL_ERR, STATUS_INTERNAL_ERR);
}
public static Status error(String msg) {
return new Status(INTERNAL_ERR, msg);
}
}
public interface StatusConstant extends ResultCode {
String STATUS_OK = "OK";
String STATUS_NOT_FOUND = "Not Found";
String STATUS_PARAMS_INVALID = "Params Invalid";
String STATUS_INTERNAL_ERR = "Server Internal Error";
}
public interface ResultCode {
int SUCCESS = 200;
int BAD_REQUEST = 400;
int UNAUTHORIZED = 401;
int FORBIDDEN = 403;
int NOT_FOUND = 404;
int METHOD_ALLOWED = 405;
int PARAMS_INVALID = 412;
int INTERNAL_ERR = 500;
}
附錄2:入參的數據結構
/** * @ClassName: MemberChangePasswordDTO * @Description: 密碼變動 * @author: yaozhenhua * @date: 2019/3/26 15:26 */@Datapublic class MemberChangePasswordDTO { private String oldPassword; private String password; private String passwordEnsure;}