HttpClient POST請求


@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:null

請求地址:
@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
*/
@Data
public class MemberChangePasswordDTO {
private String oldPassword;
private String password;
private String passwordEnsure;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM