自定义HTTP状态代码

时间:2015-06-24 11:52:53

标签: java fluent-http

我考虑在项目中使用fluent-http

我从一个简单的“登录/密码”页面开始。我创建了一个包含字段loginpassword的简单POJO:

public class LoginRequest() {
  private String login;
  private String password;
  //...
}

我通过Resource发送给fluent-http:

@Prefix("/user")
public class PersonResource {

  @Post("/")
  public String get(LoginRequest loginRequest) {
    //[...]
  }
}

它运作良好:)

现在,我想知道是否可以在成功的情况下发送代码为HTTP 200的响应,在发生故障时发送代码HTTP 401。

所以我试着注入Response

@Post("/")
public String login(LoginRequest loginRequest, Response response) {
  if(loginRequest.getPassword().equals("helloworld")) {
    response.setStatus(200);
    return "SUCCESS";
  } else {
    response.setStatus(401);
    return "ERROR";
  }
}

返回正确的String但似乎没有使用状态代码。在这两种情况下,响应都有代码HTTP 200。

注意:我发现某些状态代码已预先实现:

  • 如果发生异常,则返回代码500。
  • 如果找不到资源,则返回代码400。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果要更改默认内容类型,状态或标头,该方法应返回net.codestory.http.payload.Payload

这是你应该写的:

@Post("/")
public Payload login(LoginRequest loginRequest) {
  if(!loginRequest.getPassword().equals("helloworld")) {
    return new Payload("ERROR").withCode(HttpStatus.UNAUTHORIZED);
  }

  return new Payload("SUCCESS").withCode(HttpStatus.CREATED);
}