Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC REST JSON jQuery用于jpa查询的动态参数_Java_Jquery_Json_Spring_Jpa - Fatal编程技术网

Java Spring MVC REST JSON jQuery用于jpa查询的动态参数

Java Spring MVC REST JSON jQuery用于jpa查询的动态参数,java,jquery,json,spring,jpa,Java,Jquery,Json,Spring,Jpa,我需要一些有关此问题的技术输入: 我想搜索具有不同参数的合同。现在我搜索五个参数:FromDate、EndDate、Season、Name和Category。在未来,应该可以搜索参数的动态方式。所有参数都是合同域对象的值 var contract= {fromDate:moment($('#datepickerVon').val(), 'DD-MM-YYYY').format('DD-MM-YYYY'), endDate:moment($('#datepickerBis

我需要一些有关此问题的技术输入:

我想搜索具有不同参数的合同。现在我搜索五个参数:FromDate、EndDate、Season、Name和Category。在未来,应该可以搜索参数的动态方式。所有参数都是合同域对象的值

  var contract= {fromDate:moment($('#datepickerVon').val(), 'DD-MM-YYYY').format('DD-MM-YYYY'),
           endDate:moment($('#datepickerBis').val(), 'DD-MM-YYYY').format('DD-MM-YYYY'),
           season:$('#season').val(),
           name:$('#name').val(),
           category:$('#category').val()};

      $.ajax({
          url:'/contract/search/',
          dataType: "json",
          type: "GET",
          traditional : true,
          contentType: "application/json",
          data: contract,
          success: function(data) {

          }
          });
我使用了这个控制器方法

    @RequestMapping(value = "/search/", method = RequestMethod.GET, headers = "Accept=application/json")
@ResponseBody
public ResponseEntity<String> getContractFromSearch(
        @RequestParam Map<String, String> allRequestParams, ModelMap model) {List<Vertrag> result = Contract.findAllContractsPerParameter(
            allRequestParams.get("fromDate"),
            allRequestParams.get("endDate"),
            Season.findSeason(allRequestParams.get("season").toUpperCase()),
            Name.findName(allRequestParams.get("name").toUpperCase()),
            Category.findCategory(allRequestParams.get("category").toUpperCase()));
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json; charset=utf-8");
    return new ResponseEntity<String>(Contract.toJsonArray(result), headers,
            HttpStatus.OK);
}
@RequestMapping(value=“/search/”,method=RequestMethod.GET,headers=“Accept=application/json”)
@应答器
公共响应从搜索中获取合同(
@RequestParam Map allRequestParams,ModelMap model){List result=Contract.findAllContractsPerParameter(
allRequestParams.get(“fromDate”),
allRequestParams.get(“endDate”),
Season.findSeason(allRequestParams.get(“Season”).toUpperCase()),
Name.findName(allRequestParams.get(“Name”).toUpperCase()),
Category.findCategory(allRequestParams.get(“Category”).toUpperCase());
HttpHeaders=新的HttpHeaders();
添加(“内容类型”、“应用程序/json;字符集=utf-8”);
返回新的ResponseEntity(Contract.toJsonArray(result)),标题,
HttpStatus.OK);
}
季节、名称、类别是合同的依赖项。因此,对于jpa查询,我需要每个查询的完整对象。为此,我需要一种动态的方式,而不是为所有人编写类似的代码。但我确信还有另一个更好的解决办法。 也许可以使用契约对象(域和json)itstelf和jpa查询来实现


感谢您的投入。

根据您对问题的描述,我想您可以开发名为Contract的命令对象

 class Contract{

   private Date fromDate;   
   private Date endDate;    
   private String season;   
   private String name; 
   private String category;

// Getters and setters 

}
然后,您可以将其传递给getContractFromSearch(方法,如下所示:

 public ResponseEntity<String> getContractFromSearch(
    @ModelAttribute Contract contract, ModelMap model) {
public ResponseEntity getContractFromSearch(
@模型属性(合同、模型映射模型){

这里的Contract对象将由Spring Binder根据JSON数据填充。您可能需要编写日期对象的添加转换逻辑。

我尝试了这个示例,它对我有效

json现在如下所示:

contract = {fromDate:moment($('#datepickerVon').val(), 'DD-MM-YYYY').format('DD-MM-YYYY'), endDate:moment($('#datepickerVon').val(), 'DD-MM-YYYY').format('DD-MM-YYYY'), Season: {
          season: "SO14"}, name: {name: "peter"}, category:{category:"SomeString"}};

          console.log(contract);
      $.ajax({
          url:'/contracts/search/',
          dataType: "json",
          type: "POST",
          mimeType: 'application/json',
          contentType: "application/json",
          data: JSON.stringify(contract),
          success: function(data) {
              console.log(data);
          }
          }); 
@RequestMapping(value = "/search/", method = RequestMethod.POST, headers = "Accept=application/json")
public ResponseEntity<String> getVertagFromSearch(@RequestBody String json, UriComponentsBuilder uriBuilder){
Contract contract = contract.fromJsonToContract(json);
    //do Stuff
    return new ResponseEntity<String>(Contract.toJsonArray(result), headers, HttpStatus.OK);
}
控制器接收如下信息:

contract = {fromDate:moment($('#datepickerVon').val(), 'DD-MM-YYYY').format('DD-MM-YYYY'), endDate:moment($('#datepickerVon').val(), 'DD-MM-YYYY').format('DD-MM-YYYY'), Season: {
          season: "SO14"}, name: {name: "peter"}, category:{category:"SomeString"}};

          console.log(contract);
      $.ajax({
          url:'/contracts/search/',
          dataType: "json",
          type: "POST",
          mimeType: 'application/json',
          contentType: "application/json",
          data: JSON.stringify(contract),
          success: function(data) {
              console.log(data);
          }
          }); 
@RequestMapping(value = "/search/", method = RequestMethod.POST, headers = "Accept=application/json")
public ResponseEntity<String> getVertagFromSearch(@RequestBody String json, UriComponentsBuilder uriBuilder){
Contract contract = contract.fromJsonToContract(json);
    //do Stuff
    return new ResponseEntity<String>(Contract.toJsonArray(result), headers, HttpStatus.OK);
}
@RequestMapping(value=“/search/”,method=RequestMethod.POST,headers=“Accept=application/json”)
public ResponseEntity getVertagFromSearch(@RequestBody String json,UriComponentsBuilder uriBuilder){
Contract Contract=Contract.fromJsonToContract(json);
//做事
返回新的ResponseEntity(Contract.toJsonArray(result)、headers、HttpStatus.OK);
}
反序列化在这里:

public static contract fromJsonToContract(String json) {
    return new JSONDeserializer<Contract>().use(Calendar.class, new CalendarTransformer("dd-MM-yyyy HH:mm")).use(null, Contract.class).deserialize(json);
}
publicstaticcontract fromJsonToContract(字符串json){
返回新的JSONDeserializer();
}

使用Spring MVCThanks中的命令对象绑定作为您的输入,您能给我一些更多的信息吗。谢谢。当然,我已经得到了contract域类,并尝试了您的示例。在我的情况下,contract没有从json获得任何值,但我认为它应该有还是没有?@Patrick-尝试只发送季节、名称、类别。如果成功sful我们将继续转换日期类型。