AJAX + Rest + Spring + MySQL有问题。请求是成功的,但是响应是空的,不管请求中使用的格式。事实上,请求有效负载显示了"customer“:"MyCustomer”,所以我认为控制器中存在问题。
AJAX函数ajax_ciudad(customer) { // onchange复选框
$.ajax({
type: "POST",
contentType: "application/json",
url: "/api/ciudades",
data: JSON.stringify(customer),
dataType: 'json',
cache: false,
timeout: 600000,
}).then(function(data) {
DO SOMETHING....
});
});}
控制器
@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响应有信息,但是当我传递值时,它不工作;我做错了什么?谢谢你的帮忙
我的实体类
@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****
}发布于 2018-10-17 17:33:37
我希望您已经正确地定义了您的回购,并返回正确的数据,基于客户字符串。
从ajax "customer"传递为@Param,并像这样定义控制器,因为@RestController包括@Controller和@ResponseBody:
@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。
@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中这样定义您的方法:
@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),请遵循以下步骤:
@RequestBody方式处理请求
@PostMapping("/api/ ciudades ")公共ResponseEntity getSedes(@RequestBody customer){ List ciudades=getSedes返回新的ResponseEntity<>(ciudades,HttpStatus.OK);}https://stackoverflow.com/questions/52860446
复制相似问题