首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字符串参数传递给自定义存储库方法?

问如何将字符串参数传递给自定义存储库方法?
EN

Stack Overflow用户
提问于 2018-10-17 17:23:00
回答 1查看 1.9K关注 0票数 2

AJAX + Rest + Spring + MySQL有问题。请求是成功的,但是响应是空的,不管请求中使用的格式。事实上,请求有效负载显示了"customer“:"MyCustomer”,所以我认为控制器中存在问题。

AJAX函数ajax_ciudad(customer) { // onchange复选框

代码语言:javascript
复制
$.ajax({
    type: "POST",
    contentType: "application/json",
    url: "/api/ciudades",
    data: JSON.stringify(customer),
    dataType: 'json',
    cache: false,
    timeout: 600000,
        }).then(function(data) {
            DO SOMETHING.... 
           });
        });

}

控制器

代码语言:javascript
复制
@RestController
@RequestMapping
public class SearchController {
@Autowired
    private MyRepository myRepository;
    @PostMapping("/api/ciudades")
    public @ResponseBody List<?> getSedes(String customer){

        List<Canal> ciudades = myRepository.findBySede(customer);
        return ciudades;
    }


REPOSITORY
    @Query(value ="SELECT * FROM canal WHERE cliente = ?1", nativeQuery = true)
    List<Canal> findBySede(@Param("customer") String customer);

..。始终返回空对象[]

在这里输入图像描述

我尝试过几种数据格式,我尝试使用.val()获取Select来获取字符串,使用.value获取html值.如果我手动设置一个参数(如myRepository.findBySede("MyString") ),ajax响应有信息,但是当我传递值时,它不工作;我做错了什么?谢谢你的帮忙

我的实体类

代码语言:javascript
复制
@Entity
@Table(name = "canal")
public class Canal { 

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "idcanal", unique = true, nullable = false)
    int id;
    @Column(name = "cliente")
    String cliente;
    @Column(name = "ciudad")
    String ciudad;
    @Column(name = "sede")
    String sede;
    @Column(name = "canal")
    String canal;
    @Column(name = "ip_pe")
    String ip_pe;
    @Column(name = "nombre_pe")
    String nombre_pe;
    @Column(name = "ipwan_pe")
    String ipwan_pe;
    @Column(name = "puerto_pe")
    String puerto_pe    ;
    @Column(name = "ipwan_router")
    String ipwan_router;
    @Column(name = "enrutamiento")
    String enrutamiento;
    *****getters and setters****
     }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 17:33:37

我希望您已经正确地定义了您的回购,并返回正确的数据,基于客户字符串。

从ajax "customer"传递为@Param,并像这样定义控制器,因为@RestController包括@Controller和@ResponseBody:

代码语言:javascript
复制
@RestController
public class SearchController {
    @Autowired
    private MyRepository myRepository;

    @PostMapping("/api/ciudades")
    public List<Canal> getSedes(@Param("customer") String customer){

        List<Canal> ciudades = myRepository.findBySede(customer);
        return ciudades;
    }

或者更好的方法,返回ResponseEntity。

代码语言:javascript
复制
@RestController
public class SearchController {
    @Autowired
    private MyRepository myRepository;

    @PostMapping("/api/ciudades")
    public ResponseEntity<?> getSedes(@Param("customer") String customer){

        List<Canal> ciudades = myRepository.findBySede(customer);
        return new ResponseEntity<>(ciudades , HttpStatus.OK);
    }

在repo中这样定义您的方法:

代码语言:javascript
复制
@Repository|
public interface MyRepository extends CrudRepository<Canal, String> 

    @Query(value ="SELECT * FROM canal GROUP BY cliente", nativeQuery = true)
    List<Canal> findByIdcanal(); // works fines

  //I assume here you have canal table and cliente is column in it as you 
   running native query

    @Query(value ="SELECT * FROM canal WHERE cliente = ?1", nativeQuery = true)
    List<Canal> findBySede(String customer); // doesn't work

  //OR try this as JPQL if you have Canal is entity and cliente as string type in it.
    @Query(value ="Select c from Canal c WHERE c.cliente = :cliente")
    List<Canal> findBySede(@Param("cliente") String customer); 

   //OR simply have Named query I assume you have Canal and cliente string type

   List<Canal> findByCliente(String customer); 


}

当我检查您的本机查询时,更新很好。

如果您希望在控制器中以@RequestBody的形式发送customer(string),请遵循以下步骤:

  1. 创建一个类客户 公共类客户{私有字符串客户;公共字符串getCustomer() {返回客户;}公共无效setCustomer(字符串客户){ this.customer = customer;} }
  2. 以@RequestBody方式处理请求 @PostMapping("/api/ ciudades ")公共ResponseEntity getSedes(@RequestBody customer){ List ciudades=getSedes返回新的ResponseEntity<>(ciudades,HttpStatus.OK);}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52860446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档