Unirest Java中的post请求导致302 http结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unirest Java中的post请求导致302 http结果相关的知识,希望对你有一定的参考价值。

我正在训练自己创建一个安静的服务器和基于桌面java的客户端。

我的后端是基于Spring Boot的,我有以下控制器:

@RestController
@RequestMapping(NiveauAccessController.URL)
public class NiveauAccessController extends GenericController{

public static final String URL = "/acl";

@Autowired
private NiveauAccessRepository niveauAccessRepository;

@PostMapping
private ServerResponse createACL(
            @RequestParam("aclTitle") final String aclTitle,
            @RequestParam("roles") final List<String> roles 
){
    if(isSessionValid()){
        final MNG_NIVEAU_ACCEE mng_niveau_accee = new MNG_NIVEAU_ACCEE();
        mng_niveau_accee.setAclTitle(aclTitle);
        List<Role> enumRoles = new ArrayList();
        roles.stream().forEach(role->{
            enumRoles.add(Role.valueOf(role));
        });
        mng_niveau_accee.setRoles(enumRoles);
        niveauAccessRepository.save(mng_niveau_accee);
        initSuccessResponse(mng_niveau_accee);
        return serverResponse;
    }
    initFailLoginResponse();
    return serverResponse;
}
.
.
.
}

对于我的Java客户端,我使用此示例代码通过我的服务器发送一个帖子请求:

@FXML
private void doAdd(ActionEvent event) throws UnirestException {
    if (titleACL.getText().isEmpty()) {
        Alert alert = new Alert(Alert.AlertType.ERROR);
        alert.initModality(Modality.WINDOW_MODAL);
        alert.initOwner(((Node) event.getSource()).getScene().getWindow());
        alert.setContentText("Veuillez remplir le champ");
        alert.showAndWait();
        titleACL.requestFocus();
        return;
    }
    String title = titleACL.getText();
    Predicate<? super JFXCheckBox> selectedCheckboxes = checkbox -> {
        return checkbox.isSelected();
    };
    List<JFXCheckBox> selectedCheckBoxesList = observableCheckBoxes.values().stream().filter(selectedCheckboxes).collect(Collectors.toList());
    final List<String> roles = new ArrayList<>();
    selectedCheckBoxesList.stream().forEach(checkbox -> {
        roles.add(checkbox.getText());
    });

    HttpResponse<String> asString = Unirest.post(ACL_URL)
            .header("accept", "application/json")
            .field("aclTitle", title)
            .field("roles", roles)
            .asString();

    System.out.println(asString.getStatus());
    System.out.println(asString.getHeaders().values());
    if (asString.getStatus() == 200) {
    }
}

我的输出是:

302

[[0],[星期四,2018年5月10日13:30:05 GMT],[https://localhost:8443/acl]]

我不明白为什么我得到了用于URL重定向的302状态代码。

我试图使用这篇文章将数据添加到我的数据库。

我该怎么做才能让我的服务器接受这个请求?

答案

havins ssl启用我的请求超过8080重定向到8443这是使用Web浏览器没问题,因为它将处理重定向但在javafx客户端你必须自己处理重定向所以有一个可能的解决方案

if (asString.getStatus() == 200) {
      //your success handler code
}else if (asString.getStatus() == 302) {
      // use your Rest api to do the request using the response body
}

以上是关于Unirest Java中的post请求导致302 http结果的主要内容,如果未能解决你的问题,请参考以下文章

Axios Post 请求 Giving Error 400 , Bad Request

关于网络请求302,重定向的问题

http 状态码301、302、303、307、308 的区别

Laravel 5.4 POST 到 API 重定向 302 而不是返回验证错误

AngularJS:POST请求返回302后发送的GET请求用于登录

Web App 在 POST 请求中执行 302 状态的 respods