Skip to content

Commit

Permalink
Retain non-null HttpStatus return value in Client(Http)Response
Browse files Browse the repository at this point in the history
  • Loading branch information
jhoeller committed Jul 30, 2019
1 parent 29ef985 commit 960079e
Show file tree
Hide file tree
Showing 10 changed files with 36 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public MockClientHttpResponse(int status) {

@Override
public HttpStatus getStatusCode() {
return HttpStatus.resolve(this.status);
return HttpStatus.valueOf(this.status);
}

@Override
Expand All @@ -81,10 +81,9 @@ public int getRawStatusCode() {

@Override
public HttpHeaders getHeaders() {
String headerName = HttpHeaders.SET_COOKIE;
if (!getCookies().isEmpty() && this.headers.get(headerName) == null) {
if (!getCookies().isEmpty() && this.headers.get(HttpHeaders.SET_COOKIE) == null) {
getCookies().values().stream().flatMap(Collection::stream)
.forEach(cookie -> getHeaders().add(headerName, cookie.toString()));
.forEach(cookie -> getHeaders().add(HttpHeaders.SET_COOKIE, cookie.toString()));
}
return this.headers;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -35,18 +35,19 @@
public interface ClientHttpResponse extends HttpInputMessage, Closeable {

/**
* Return the HTTP status code of the response.
* @return the HTTP status as an HttpStatus enum value
* Return the HTTP status code as an {@link HttpStatus} enum value.
* @return the HTTP status as an HttpStatus enum value (never {@code null})
* @throws IOException in case of I/O errors
* @throws IllegalArgumentException in case of an unknown HTTP status code
* @since #getRawStatusCode()
* @see HttpStatus#valueOf(int)
*/
HttpStatus getStatusCode() throws IOException;

/**
* Return the HTTP status code (potentially non-standard and not
* resolvable through the {@link HttpStatus} enum) as an integer.
* @return the HTTP status as an integer
* @return the HTTP status as an integer value
* @throws IOException in case of I/O errors
* @since 3.1.1
* @see #getStatusCode()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import org.springframework.http.HttpStatus;
import org.springframework.http.ReactiveHttpInputMessage;
import org.springframework.http.ResponseCookie;
import org.springframework.lang.Nullable;
import org.springframework.util.MultiValueMap;

/**
Expand All @@ -32,18 +31,18 @@
public interface ClientHttpResponse extends ReactiveHttpInputMessage {

/**
* Return the HTTP status code of the response.
* @return the HTTP status as an HttpStatus enum value
* Return the HTTP status code as an {@link HttpStatus} enum value.
* @return the HTTP status as an HttpStatus enum value (never {@code null})
* @throws IllegalArgumentException in case of an unknown HTTP status code
* @see HttpStatus#resolve(int)
* @since #getRawStatusCode()
* @see HttpStatus#valueOf(int)
*/
@Nullable
HttpStatus getStatusCode();

/**
* Return the HTTP status code (potentially non-standard and not
* resolvable through the {@link HttpStatus} enum) as an integer.
* @return the HTTP status as an integer
* @return the HTTP status as an integer value
* @since 5.0.6
* @see #getStatusCode()
* @see HttpStatus#resolve(int)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public ClientHttpResponse getDelegate() {
}


// ServerHttpResponse delegation methods...
// ClientHttpResponse delegation methods...

@Override
public HttpStatus getStatusCode() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public JettyClientHttpResponse(ReactiveResponse reactiveResponse, Publisher<Data

@Override
public HttpStatus getStatusCode() {
return HttpStatus.resolve(getRawStatusCode());
return HttpStatus.valueOf(getRawStatusCode());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public HttpHeaders getHeaders() {

@Override
public HttpStatus getStatusCode() {
return HttpStatus.resolve(getRawStatusCode());
return HttpStatus.valueOf(getRawStatusCode());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public MockClientHttpResponse(int status) {

@Override
public HttpStatus getStatusCode() {
return HttpStatus.resolve(this.status);
return HttpStatus.valueOf(this.status);
}

@Override
Expand All @@ -81,10 +81,9 @@ public int getRawStatusCode() {

@Override
public HttpHeaders getHeaders() {
String headerName = HttpHeaders.SET_COOKIE;
if (!getCookies().isEmpty() && this.headers.get(headerName) == null) {
if (!getCookies().isEmpty() && this.headers.get(HttpHeaders.SET_COOKIE) == null) {
getCookies().values().stream().flatMap(Collection::stream)
.forEach(cookie -> getHeaders().add(headerName, cookie.toString()));
.forEach(cookie -> getHeaders().add(HttpHeaders.SET_COOKIE, cookie.toString()));
}
return this.headers;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
import org.springframework.http.client.reactive.ClientHttpResponse;
import org.springframework.http.codec.HttpMessageReader;
import org.springframework.http.codec.HttpMessageWriter;
import org.springframework.lang.Nullable;
import org.springframework.util.MultiValueMap;
import org.springframework.web.reactive.function.BodyExtractor;

Expand All @@ -60,17 +59,17 @@
public interface ClientResponse {

/**
* Return the status code of this response.
* @return the status as an HttpStatus enum value
* Return the HTTP status code as an {@link HttpStatus} enum value.
* @return the HTTP status as an HttpStatus enum value (never {@code null})
* @throws IllegalArgumentException in case of an unknown HTTP status code
* @see HttpStatus#resolve(int)
* @since #getRawStatusCode()
* @see HttpStatus#valueOf(int)
*/
@Nullable
HttpStatus statusCode();

/**
* Return the (potentially non-standard) status code of this response.
* @return the status as an integer
* @return the HTTP status as an integer value
* @since 5.1
* @see #statusCode()
* @see HttpStatus#resolve(int)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ public BuiltClientHttpResponse(int statusCode, HttpHeaders headers,

@Override
public HttpStatus getStatusCode() {
return HttpStatus.resolve(this.statusCode);
return HttpStatus.valueOf(this.statusCode);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

import java.nio.charset.StandardCharsets;

import org.junit.Before;
import org.junit.Test;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
Expand All @@ -32,19 +31,15 @@

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;

/**
* @author Arjen Poutsma
*/
public class DefaultClientResponseBuilderTests {

private DataBufferFactory dataBufferFactory;
private final DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory();

@Before
public void createBufferFactory() {
this.dataBufferFactory = new DefaultDataBufferFactory();
}

@Test
public void normal() {
Expand Down Expand Up @@ -104,17 +99,17 @@ public void from() {

@Test
public void fromCustomStatus() {

ClientResponse other = ClientResponse.create(499, ExchangeStrategies.withDefaults())
.build();

ClientResponse result = ClientResponse.from(other)
.build();

ClientResponse other = ClientResponse.create(499, ExchangeStrategies.withDefaults()).build();
ClientResponse result = ClientResponse.from(other).build();
assertEquals(499, result.rawStatusCode());
assertNull(result.statusCode());

try {
result.statusCode();
fail("Expected IllegalArgumentException");
}
catch (IllegalArgumentException ex) {
// expected
}
}


}

0 comments on commit 960079e

Please sign in to comment.