【问题标题】:Spring Boot JPA with CrudRepository带有 CrudRepository 的 Spring Boot JPA
【发布时间】: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


【解决方案1】:

在方法中添加@ResponseBody,这样它就可以在请求中以JSON返回您的Object

@RequestMapping(value="/usuarios", method = RequestMethod.GET, headers = "Accept=aplication/json")
@ResponseBody // Add this
public ResponseEntity<List<Usuario>> getUsuarios(@RequestParam(value="usuario", required=false) String usuario) {
//
}

【讨论】:

  • 什么也没发生,我用主控制器更新线程,如果我得到答案(不是在 json 中)。
【解决方案2】:

你需要添加到你的@RequestMapping

produces = "application/json; charset=UTF-8"

你可以使用spring boot

@GetMapping(value = "/usuarios")

并且开箱即用地为您完成

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2020-09-29
    • 1970-01-01
    • 2016-07-01
    • 2020-02-25
    相关资源
    最近更新 更多