Tengo una API restful en Java y funciona perfectamente cuando uso insomnio o cartero, pero estoy tratando de hacer que mi interfaz de usuario reaccione, pero el estado que obtengo es "fallido" y me muestra "bloqueado por CORS". . Puedo resolver este "bloqueo" cambiando mi interfaz de http a https, pero el estado "fallido" aún persiste y cuando uso https en insomnio, no funciona. ¿Puede alguien ayudarme?
código de front-end
import axios from 'axios';
const api = axios.create({
baseURL: 'http://localhost:8080/PfcPubApi'
});
export default api;
import React, {useState} from 'react';
import api from './service/api';
function App() {
const [nome, setNome] = useState('');
const [cpf, setCpf] = useState('');
const [endereco, setEndereco] = useState('');
const [cargo, setCargo] = useState('');
const [senha, setSenha] = useState('');
async function cadastrarFunc(e){
e.preventDefault();
const response = await api.post('/api/item', {
nome,
cpf,
endereco,
cargo,
senha,
})
console.log(response.data);
}
return (
<form onSubmit={cadastrarFunc}>
nome:<input type="text" name="nome" value={nome} onChange={e => setNome(e.target.value)}></input>
cpf:<input type="text" name="cpf" value={cpf} onChange={e => setCpf(e.target.value)}></input>
endereco:<input type="text" name="endereco" value={endereco} onChange={e => setEndereco(e.target.value)}></input>
cargo:<input type="text" name="cargo" value={cargo} onChange={e => setCargo(e.target.value)}></input>
senha:<input type="text" name="senha" value={senha} onChange={e => setSenha(e.target.value)}></input>
<button type="submit">Salvar</button>
</form>
);
}
export default App;
tal vez esta imagen también pueda ayudar ... ingrese la descripción de la imagen aquí
editar: código api
package controle;
import java.util.Set;
@javax.ws.rs.ApplicationPath("api")
public class ApplicationConfig extends javax.ws.rs.core.Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<>();
addRestResourceClasses(resources);
return resources;
}
private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(controle.FuncionarioService.class);
}
}
package controle;
import com.google.gson.Gson;
import dao.FuncionarioDao;
import java.sql.SQLException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import modelo.Funcionario;
@Path("/item")
public class FuncionarioService {
@Context
private UriInfo context;
public FuncionarioService() {
}
@GET
@Path("")
@Produces(MediaType.APPLICATION_JSON)
public String listAllPerson() throws SQLException {
FuncionarioDao funcionario = new FuncionarioDao();
return new Gson().toJson(funcionario.consultarTodosFunc());
}
@GET
@Path("/{cpf}")
@Produces(MediaType.APPLICATION_JSON)
public String consultarFunc(@PathParam("cpf") String cpf) throws SQLException {
Funcionario funcionario = new Funcionario();
funcionario.setCpf(cpf);
FuncionarioDao Request = new FuncionarioDao();
return new Gson().toJson(Request.consultarFunc(funcionario));
}
@POST
@Path("")
@Consumes(MediaType.APPLICATION_JSON)
public String cadastrarFunc(String dataPerson) throws SQLException {
Funcionario funcionario = new Gson().fromJson(dataPerson, Funcionario.class);
FuncionarioDao Request = new FuncionarioDao();
funcionario = Request.cadastrarFunc(funcionario);
return new Gson().toJson(funcionario);
}
@PUT
@Path("")
@Consumes(MediaType.APPLICATION_JSON)
public String alterarFunc(String dataPerson) throws ClassNotFoundException, SQLException {
Funcionario person = new Gson().fromJson(dataPerson, Funcionario.class);
FuncionarioDao Request = new FuncionarioDao();
return new Gson().toJson(Request.alterarFunc(person));
}
@DELETE
@Path("/{cpf}")
@Consumes(MediaType.APPLICATION_JSON)
public String excluirFunc(@PathParam("cpf") String cpf) throws SQLException{
Funcionario funcionario = new Funcionario();
funcionario.setCpf(cpf);
FuncionarioDao Request = new FuncionarioDao();
return new Gson().toJson(Request.excluirFunc(funcionario));
}
}
Tendrá que habilitar el uso compartido de recursos de origen cruzado (CORS) para su API. Dado que está utilizando JAX-RS, puede crear un filtro y establecer el encabezado "Access-Control-Allow *" en la respuesta o hacer lo mismo en el método de punto final de la URL.
El siguiente artículo explica que se detallará con ejemplos de código.
https://www.baeldung.com/cors-in-jax-rs
¡Espero que esto ayude!
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras