【发布时间】:2018-05-12 14:19:54
【问题描述】:
下午好,我正在创建一个 REST API,但在实现 Spring JPA 的 CrudRepository 时遇到了问题。我无法使用 JSON 使用 API,POSTMAN 中出现 406 Not Aceptable,我很困惑,因为使用 DAO 它对我有用,但是使用 JPA 的实现不,我有一些错误的概念。
我描述了问题:
IDE - STS
实体:
@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {
private static final long serialVersionUID = -1949174611236850070L;
@Id
@Column (name = "id_usuario")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idUsuario;
@Column(name = "usuario")
private String usuario;
@Column(name = "clave")
private String clave;
@Column(name = "nombre")
private String nombre;
@Column(name = "apellido")
private String apellido;
@Column(name = "foto")
private String foto;
@ManyToOne
@JoinColumn(name = "idPrivilegio")
@JsonIgnore
private Privilegio privilegio;
public Usuario() {
}
public Usuario(String usuario, String clave, String nombre, String apellido, String foto, Privilegio privilegio) {
this.usuario = usuario;
this.clave = clave;
this.nombre = nombre;
this.apellido = apellido;
this.foto = foto;
this.privilegio = privilegio;
}
public Long getIdUsuario() {
return idUsuario;
}
public void setIdUsuario(Long idUsuario) {
this.idUsuario = idUsuario;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getClave() {
return clave;
}
public void setClave(String clave) {
this.clave = clave;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public Privilegio getPrivilegio() {
return privilegio;
}
public void setPrivilegio(Privilegio privilegio) {
this.privilegio = privilegio;
}
}
存储库:
public interface UsuarioRepository extends CrudRepository<Usuario, Long> {
public Usuario findByUsuarioAndClave(String usuario, String clave);
public Usuario findByUsuario(String usuario);
}
服务:
Service("usuarioService")
@Transactional
public class UsuarioService {
@Autowired
private UsuarioRepository usuarioRepository;
public List<Usuario> findAll() {
return (List<Usuario>) usuarioRepository.findAll();
}
public Usuario findByUsuarioAndClave(String usuario, String clave) {
return usuarioRepository.findByUsuarioAndClave(usuario, clave);
}
public void save(Usuario usuario) {
usuarioRepository.save(usuario);
}
public Usuario findByUsuario(String usuario) {
return usuarioRepository.findByUsuario(usuario);
}
}
控制器:
@Controller
@RequestMapping("/sg-v1")
public class UsuarioController {
@Autowired
UsuarioService _usuarioService;
//GET
@RequestMapping(value="/usuarios", method = RequestMethod.GET, headers = "Accept=aplication/json")
public ResponseEntity<List<Usuario>> getUsuarios(
@RequestParam(value="usuario", required=false) String usuario) {
List<Usuario> usuarios = new ArrayList<>();
if (usuario == null) {
usuarios = (List<Usuario>) _usuarioService.findAll();
if (usuarios.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<List<Usuario>>(usuarios, HttpStatus.OK);
}
else {
Usuario user = _usuarioService.findByUsuario(usuario);
if (user == null) {
return new ResponseEntity<List<Usuario>>(HttpStatus.NOT_FOUND);
}
usuarios.add(user);
return new ResponseEntity<List<Usuario>>(usuarios, HttpStatus.OK);
}
}
}
主控制器:
@Controller
public class MainController {
@RequestMapping("/")
@ResponseBody
public String index() {
String response = "Bienvenido a <a href = 'http://soliddev.com.ar'>soliddev.com.ar</a> !";
return response;
}
}
【问题讨论】:
-
什么版本的 Spring?
-
在邮递员中,在发送按钮的正下方,有一个橙色链接
code,它会弹出一个带有curl命令的窗口,你能把它粘贴在这里吗?听起来更像是您没有正确查询它而不是服务器上的错误 -
@msagala25 版本是 4.3.12.RELEASE
-
@LuisRamirez-Monterosa 代码:curl -X GET \ 'localhost:8080/sg-v1/usuarios/?usuario=admin' \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ - H'邮递员令牌:aa1bf6e5-aae7-1225-c6df-6c531907cb20'
标签: java spring hibernate spring-mvc spring-data-jpa