我用Spring Boot Rest实现了控制器:
@RestController
@RequestMapping("/example")
public class ExampleController {
@Autowired
private ExampleService exampleService;
@GetMapping("/{id}")
public ExampleResponse getExample(@NotNull @PathVariable("id") String id) {
return exampleService.getExample(id);
}
}
DTO回应道:
public class ExampleResponse {
@NotNull
private String id;
@NotNull
private String otherStuff;
// setters and getters
}
未验证响应正文。我已经用< code>@Valid对其进行了注释,但是< code>null值仍然通过。请求验证工作良好。
如何验证响应正文?
您可以添加“@Validated@ResponseBody”注释
public @Validated @ResponseBody getExample(@NotNull @PathVariable("id") String id) {
在Rest Controller上使用@Valked
,在必须验证返回对象的方法上使用@Valid
。例如:
Rest控制器:
@RestController
@RequestMapping("/tasks")
@Validated
public class TaskController {
@GetMapping("/{taskId}")
@Valid
public TaskDTO getTask(@PathVariable UUID taskId) {
return convertToDto(taskService.findById(taskId));
}
}
DTO级:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ValidTaskDTO
public class TaskDTO {
@FutureOrPresent
@NotNull
private ZonedDateTime dueDate;
@NotBlank(message = "Title cannot be null or blank")
private String title;
private String description;
@NotNull
private RecurrenceType recurrenceType;
@Future
@NotNull
private ZonedDateTime repeatUntil;
}
我的返回对象TaskDTO
具有nulldueDate
和reupreTot
。所以错误消息如下所示:
{
"timestamp": "2021-01-20T11:09:37.303929",
"status": 400,
"error": "Bad Request",
"message": "getTask.<return value>.dueDate: must not be null, getTask.<return value>.repeatUntil: must not be null",
"path": null
}
我希望这能有所帮助。有关自定义类级别约束的详细信息,请查看此视频。
实现的响应验证器:
@Aspect
@Component
public class ControllerResponseValidator {
Logger logger = Logger.getLogger(ControllerResponseValidator.class);
@Autowired
private Validator validator;
@AfterReturning(pointcut = "execution(* com.example.controller.*.*(..))", returning = "result")
public void validateResponse(JoinPoint joinPoint, Object result) {
validateResponse(result);
}
private void validateResponse(Object object) {
Set<ConstraintViolation<Object>> validationResults = validator.validate(object);
if (validationResults.size() > 0) {
StringBuffer sb = new StringBuffer();
for (ConstraintViolation<Object> error : validationResults) {
sb.append(error.getPropertyPath()).append(" - ").append(error.getMessage()).append("\n");
}
String msg = sb.toString();
logger.error(msg);
throw new RestException(HttpStatus.INTERNAL_SERVER_ERROR, msg);
}
}
}
在使用空手道框架进行API测试时,我在验证嵌套JSON响应时遇到了一些问题。 JSON响应: null def feed_cycle={item_type:'#string',title:'#string'} def feed_college_dept_branch={branch:'#string'} def feed_college={item_type:'#string',dept:'[]f
因此,应用程序流程如下: Spring应用程序接收请求- 这是我正在使用的网络客户端(副本): 现在我不想通过控制器将此Mono对象直接返回到客户端(如Angular应用程序),因为这是一个中间步骤。我想对从 WebClient 收到的响应运行一些验证。 我已经试过<代码>。block()方法来检索函数,但是按照反应式编程,这似乎是一种不好的做法。(阻塞操作)此外,我无法理解如何使用<代码>。su
OpenAM是否依赖于注册IDP的公钥来使SAML响应多样化 或还取决于来自IDP-like算法的SAML响应中的哈希算法=”http://www.w3.org/2000/09/xmldsig#sha1“” 注意OpenAM版本:13.0.0
放心,当我们这样做时 抛出的错误总是连续的,也就是说,如果状态代码失败,它不会检查contentType是否是JSON。 此外,抛出的错误始终是,断言错误(预期:200,实际:404)。无法从中了解实际响应是什么,如果启用日志记录,它将打印在标准输出上,但其他任何方式都不可用。 是否有任何方法来构建或设置类似于我们如何实现<code>过滤器 我有一个 rest api 框架,其中大多数验证都是使用
我正在使用Springs的Webclient进行HTTP GET调用。 我如何验证响应对象的属性,我收到作为我的HTTP调用的响应。 我试图通过阻止响应对象来验证平板地图中的出生日期,但这看起来不是最有效的方法。 以下是我代码的摘录。 任何帮助都非常感谢。
我有一个与 Rest Assured 中的响应正文验证相关的问题。让我们假设,我有一个像json这样的响应体。 我需要检查: 如果图书部分包含儿童类型 如果一本儿童类书籍的自动名称为Eric 第一个断言可以是这样的: 但是我需要检查它的作者的名字是否是威廉。有没有办法使用jsonPath检查它? 我假设,我可以做反序列化(例如,x. List