Die Methode zum Abrufen des Statuscodes ändert sich, ohne "DefaultResponseErrorHandler" festzulegen Die Antwort war hier, aber ich habe sie verpasst.
Java : 11 JUnit : 4.12 Spring Boot : 2.1.6
SandboxApplication.java
@SpringBootApplication
public class SandboxApplication {
public static void main(String[] args) {
SpringApplication.run(SandboxApplication.class, args);
}
//Grobbohnenregistrierung hier
@Bean
public RestTemplate setRestTemplate(){
return new RestTemplate();
}
}
Hoge.java
class Hoge {
String message;
public Hoge(@JsonProperty("message") String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
SampleTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class SampleTest {
@Autowired
RestTemplate restTemplate;
@Autowired
ObjectMapper objectMapper;
@Autowired
Sample sut;
@Test
öffentlicher Leertest() throws Exception {
//2xx Serie: ex) OK
setUpMockRestServer(HttpStatus.OK);
assertThat(sut.getHoge().getMessage(), is("Es ist 200"));
//4xx Serienfehler: ex) NOT_FOUND
setUpMockRestServer(HttpStatus.NOT_FOUND);
assertThat(sut.getHoge().getMessage(), is("Es ist 404"));
//5xx Serienfehler: ex) INTERNAL_SERVER_ERROR
setUpMockRestServer(HttpStatus.INTERNAL_SERVER_ERROR);
assertThat(sut.getHoge().getMessage(), is("Es ist 500"));
}
private void setUpMockRestServer(HttpStatus status) throws JsonProcessingException {
MockRestServiceServer mockServer = MockRestServiceServer.bindTo(restTemplate).ignoreExpectOrder(true).build();
String response = objectMapper.writeValueAsString(new Hoge(status.value() + "Korrekt"));
mockServer.expect(requestTo("https://hoges/1"))
.andRespond(withStatus(status).body(response).contentType(MediaType.APPLICATION_JSON_UTF8));
}
}
Sample.java
@Component
public class Sample {
RestTemplate restTemplate;
public Sample(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public Hoge getHoge() {
ResponseEntity<Hoge> response;
try {
response = restTemplate.getForEntity("https://hoges/1", Hoge.class);
} catch (HttpClientErrorException | HttpServerErrorException e) {
//Kann durch statusCode verzweigt werden
int statusCode = e.getStatusCode().value();
return new Hoge(statusCode + "Korrekt");
}
return response.getBody();
}
}
Dies kann erreicht werden, indem "DefaultResponseErrorHandler" geerbt und als unnötig festgelegt wird.
SampleResponseErrorHandler.java
@Component
public class SampleResponseErrorHandler extends DefaultResponseErrorHandler {
@Override
public void handleError(ClientHttpResponse response) throws IOException {
//Wenn Sie nichts schreiben, wird keine Ausnahme ausgelöst, selbst wenn ein Serverfehler und ein Clientfehler auftreten
}
}
Sample.java
@Component
public class Sample {
RestTemplate restTemplate;
SampleResponseErrorHandler sampleResponseErrorHandler;
public Sample(RestTemplate restTemplate, SampleResponseErrorHandler sampleResponseErrorHandler) {
this.restTemplate = restTemplate;
this.sampleResponseErrorHandler = sampleResponseErrorHandler;
}
public Hoge getHoge() {
//Legen Sie Ihren eigenen definierten Fehlerhandler in RestTemplate fest
restTemplate.setErrorHandler(sampleResponseErrorHandler);
ResponseEntity<Hoge> response = restTemplate.getForEntity("https://hoges/1", Hoge.class);
//Im Beispiel wird es so zurückgegeben, wie es ist, aber hier können Sie mit dem Statuscode, der von ResponseEntity abgerufen werden kann, so viel verzweigen, wie Sie möchten
return response.getBody();
}
}
Ich wollte den Statuscode und den Zweig im Detail erhalten, war aber süchtig danach, ihn mit einer Ausnahme nicht abholen zu können.
Recommended Posts