例如,我有一个类似的存储库类。
@RepositoryRestResource
public interface FooRepository extends JpaRepository<Foo, Integer> {
Optional<Foo> findByBarId(@Param("barId") Integer barId);
}
这将生成路径为http://hostname/foo/search/findByBarId{?fooId}
的搜索端点
当我不带任何参数访问该URL时,我得到一个404
,我认为可以。
但是,我宁愿为此类型发送400或错误消息,因为我的业务肯定需要此API的参数。
我尝试使用@javax.validation.constraints.NotNull
Optional<Foo> findByBarId(@Param("barId") @NotNull Integer barId);
以及@org.springframework.lang.NonNull
Optional<Foo> findByBarId(@Param("barId") @NonNull Integer barId);
两个注释均无效。当然,这是行不通的,因为这些注释本身只是元信息,而Spring框架并未考虑这些信息。
文档中没有显示任何有关参数验证行为的内容。 (他们只谈论实体生命周期validation)
是否有任何简单的方法可以实现这种行为?
如果有帮助,我使用spring-boot
2.0.4。
答案 0 :(得分:-1)
您可以编写 RepositoryRestController 来运行特定业务以自定义端点。
这是您的案例的一个示例,您也可以自定义它:
@RepositoryRestController
public class FooController {
FooRepository fooRepository;
@Autowired
public FooController(FooRepository fooRepository) {
this.fooRepository = fooRepository;
}
@GetMapping(path = "/foo")
public ResponseEntity getfoo(@RequestParam("barId") Optional<Integer> barId) {
if (!barId.isPresent()) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}
Optional<Foo> foo = fooRepository.findByBarId(barId.get());
return ResponseEntity.ok(foo);
}
}