2017-08-28 131 views
0

Spring在控制器级别支持基于注释的验证。如何验证RestTemplate响应?

(1)是否有必要在RestTemplate级别对来自REST调用的响应进行此类验证?

如果答案是肯定的: (2)在RestTemplate中是否会支持此功能以验证将来某个时候的其余呼叫的响应?

如果答案是否: (3)为什么?

+0

澄清:我的问题不是关于验证请求。我的问题是“验证来自其他服务的响应”。 – Jothi

回答

0

对我来说,问题是相当大的。 :)。根据我的理解,您希望询问Spring可以支持的REST服务中的验证。

1.是否有必要在RestTemplate级别对来自REST调用的响应进行此类验证?

实际上,这取决于您的应用程序或您的业务。你可以在Controller中完成,或者你可以在服务级别完成,甚至可以进行自定义验证。对我而言,没有人强迫你做任何事情。

但是,根据我的经验,我们应该进行确认。所以我的答案是YES。

2.在RestTemplate有没有支持它来验证将来某个时候来自其他调用的响应?

我假设你想要验证的细节?!对? Spring支持许多事情来做验证。对于简单的方法,你可以使用PathVariableRequestParameter。例如:

@GetMapping("/test/{name}") 
    private String test(@PathVariable(value = "name", required = true) String name){ 
     //... 
    } 

春天将验证所有的请求,并在需要的参数丢失或具有错误类型有400 Bad Request进行回应...

Spring也支持JSR 303 Bean验证:http://beanvalidation.org/1.0/spec/例如,在这里:

public class MessageBean { 
    @NotNull 
    private String title; 
    @NotNull 
    private String message; 

    // getters/setters/etc 
} 

或者你想不喜欢自定义用户响应:

@ExceptionHandler 
@ResponseStatus(HttpStatus.BAD_REQUEST) 
public ErrorResponse handleException(MethodArgumentNotValidException exception) { 
    //.... 
    return ErrorResponse.builder().message(errorMsg).build(); 
} 

在这里更多的细节:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-validation

所以,这取决于这就要求我们在任何级别做验证业务。

3.如果答案是否定的:(3)为什么?

无需回答此问题。 :)

希望可以帮助

+0

谢谢你的回答,但这不是我想要的。可能我的问题还不够清楚。根据技术业务需求,我可以在任何层验证“请求”。我的问题是_NOT_关于验证请求。我的问题是“验证来自其他服务的响应”。 – Jothi