如何在REST Web服务中实现最简单的外星人?
我需要一个直接从
stored procedure返回数据的JSON端点.示例:
@Procedure("complex") String complexStoredProcedure(); 最简单的情况是没有参数的GET端点…返回的数据是(blabck-box)JSON,与Spring实体没有关系,也没有特殊的数据类型(我的Spring应用程序的“外来数据类型”). . 如果你需要一个例子,假设一个简单的控制器为 @RequestMapping(value="/howto",method=RequestMethod.GET) @ResponseStatus(HttpStatus.OK) @Procedure(name = "MyRandom.random") // ?? not work public String howto() { double x = random(); // from stored-procedure call,how to do it? return "{"result":"+x+"}"; } 怎么实现呢?也就是说,实现控制器方法的最简单方法(调用存储过程)? 编辑:清理冗余代码片段,转移到answer-Wiki below. 解决方法
我不确定我是否理解你的问题,但这是我的解决方案.
我在oracle DB上创建了一个简单的过程: PROCEDURE TESTPROCOUTPUT (param2 OUT VARCHAR2) IS GETPARAM VARCHAR2(100); BEGIN param2 := 'procedure Called'; END TESTPROCOUTPUT; 要在Spring环境中使用@Procedure,您需要一个Entity和一个Repository.所以我创建了一个简单的实体和它的存储库: @Entity public class City { @Id private String cityCode; //...getter/setter } 库: public interface LandRepository extends CrudRepository<City,String> { @Procedure(name="TESTPROCOUTPUT",outputParameterName="param2") String TESTPROCOUTPUT(); } 重要的是方法名称与过程具有相同的名称. (不确定它是否仅适用于oracle的情况.也可以在camelCase中我认为) 因此,在您的控制器中,您现在可以轻松地自动装配存储库(或者如果您有接口的实现,则使用此方法). @Controller public class CityController { private CityRepository cityRepository; @RequestMapping(value="/howto",method=RequestMethod.GET) @ResponseStatus(HttpStatus.OK) @ResponseBody public String howto() { String s = cityRepository.TESTPROCOUTPUT(); return "{"result":" + s + "}"; } public CityRepository getCityRepository () { return cityRepository; } @Autowired public void setCityRepository (CityRepository cityRepository) { this.cityRepository= cityRepository; } } 结果是: 因此,您无法在非存储库方法上使用@Procedure注释.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |