繁体   English   中英

如何将可选参数传递给spring控制器和jpql查询

[英]how to pass a optional param into spring controller and jpql query

这是我的存储库:

@Query( "SELECT new com.app.gsc.entities.ListeBI(lm.listeDeCriteres.designation,count(*) as totalNumber,lm.ficheDeMission.dateEtHeurDeDepart) from ListeDeControleDetailsMission lm where lm.boolDepart=false OR lm.ficheDeMission.codeDeFicheDeMission=:CodeMission GROUP BY lm.listeDeCriteres.designation,DATE(lm.ficheDeMission.dateEtHeurDeDepart)" )
List<ListeBI> getIncidentDepart( @Param( "CodeMission" ) Integer missId );

这是我的控制器:

 @RequestMapping( value = "admin/dashboard/getIncidentDepart/{codeMission}", method = RequestMethod.GET )
public Reponse getIncidentDepart( HttpServletResponse response, @PathVariable Integer codeMission ) { // entêtes
    CorsController.getIncidentDepart( response, codeMission );
    if ( messages != null ) {
        return new Reponse( -1, messages );
    }
    List<ListeBI> listeBIs = null;
    try {
        listeBIs = application.getIncidentDepart( codeMission );
    } catch ( Exception e ) {
        return new Reponse( 5, Static.getErreursForException( e ) );
    }
    return new Reponse( 0, Static.getMapForMissionIncidents( listeBIs ) );
}

我的问题是:这第一个问题我想将codeMission传递为选择的变量,我不知道该如何放置,但是我会解释一下,如果我在控制器中传递了codeMission变量,请求应该可以正常工作,如果我不传递codeMission控件中的变量请求也应该起作用,请问我该怎么做,而且我不确定请求中的条件是否正常:

其中lm.boolDepart = false或lm.ficheDeMission.codeDeFicheDeMission =:CodeMission

关于JPQL问题

这里 :

where lm.boolDepart=false OR lm.ficheDeMission.codeDeFicheDeMission=:CodeMission


如果您的:CodeMission参数not null值,则您的过滤器会按预期工作,但如果具有null值,则它会根据:codeMission==null条件进行过滤,这不是您想要的。

要解决这两种情况( null :CodeMission参数,而not null :CodeMission参数),请尝试:

where lm.boolDepart=false OR 
      (:CodeMission is null OR lm.ficheDeMission.codeDeFicheDeMission=:CodeMission)

具体来说:

如果用:CodeMission 100填充:CodeMission值,则结果为:

where lm.boolDepart=false OR 
      (lm.ficheDeMission.codeDeFicheDeMission=:100)

如果将:CodeMission值填充为null ,则结果为:

where lm.boolDepart=false OR 
      (null is null)

关于Rest配置问题

如果您使用Spring 4和Java 8,则可以使codeMission可选:

@RequestMapping( value = "admin/dashboard/getIncidentDepart/{codeMission}", method = RequestMethod.GET )
public Reponse getIncidentDepart( HttpServletResponse response, @PathVariable Optional<Integer> codeMission ) {
...
}

否则,创建具有两个不同路径的两个方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM