加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

如何在REST Web服务中实现最简单的外星人?

发布时间:2020-12-14 18:40:41 所属栏目:资源 来源:网络整理
导读:我需要一个直接从 stored procedure返回数据的JSON端点.示例: @Procedure("complex")String complexStoredProcedure(); 最简单的情况是没有参数的GET端点…返回的数据是(blabck-box)JSON,与Spring实体没有关系,也没有特殊的数据类型(我的Spring应用程序的“
我需要一个直接从 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注释.

Annotation to declare JPA 2.1 stored procedure mappings directly on repository methods.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读