Я пытаюсь использовать API успокоить с реагировать - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть api restful в java, и он отлично работает, когда я использую бессонницу или почтальона, но я пытаюсь заставить мой интерфейс реагировать, но статус, который я получаю, «провал», и он показывает мне "заблокирован CORS". Я могу решить этот «блок», изменив мой интерфейс с http на https, но статус «сбой» все еще сохраняется, и когда я использую https при бессоннице, он не работает. Кто-нибудь может мне помочь?

код переднего конца

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;

может быть, это изображение тоже может помочь ... введите описание изображения здесь

изменить: код 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));
    }
}

1 Ответ

0 голосов
/ 16 апреля 2020

Вам необходимо включить совместное использование ресурсов между источниками (CORS) для вашего API. Поскольку вы используете JAX-RS, вы можете создать фильтр и установить заголовок «Access-Control-Allow *» в ответе или сделать то же самое для метода конечной точки URL.

В следующей статье объясняется, что это будет подробно описано в примеры кода.

https://www.baeldung.com/cors-in-jax-rs

Надеюсь, это поможет!

...