Spring Boot JPA无法使用包含重音符号的字符串插入行

时间:2018-07-24 09:28:11

标签: javascript json spring-boot jackson

我无法理解问题,因为我在任何地方都找不到相同的问题。 我尝试插入“piècesdétachées”类型的产品。在浏览器路径/ Produits上,产品未显示,但是当我从字符串中删除重音符号时,它将插入mysql db中。我试图在数据库中插入口音查询就可以了。但是用我的代码不可能做到这一点。这是我的Produit代码示例:

 //ajouter un produit
@PostMapping(value = "/Produits")
public ResponseEntity<Void> ajouterProduit(@RequestBody ProduitDTO produit) {
    Produit produitCK = new Produit();
    produitCK.setIdPM(new ProduitMagasin(produit.getId(), produit.getIdMagasin()));
    produitCK.setDateAjout(produit.getDateAjout());
    produitCK.setEtatProduit(produit.getEtatProduit());
    produitCK.setIdReference(produit.getIdReference());
    produitCK.setNumeroSerie(produit.getNumeroSerie());
    produitCK.setPrixVente(produit.getPrixVente());
    produitCK.setTVA(produit.getTVA());
    produitCK.setType(produit.getType());
    Produit produitAdded =  produitDao.save(produitCK);
    if (produitAdded == null)
        return ResponseEntity.noContent().build();
    else
        return new ResponseEntity<>(HttpStatus.CREATED);
}

ProduitDTO:

package com.stationphone.db.model;

import java.sql.Timestamp;

    /**
     *
     * @author Administrateur
 */
public class ProduitDTO {
     private int id;

    public enum Type {
        PIECES {
          public String getString() {
              return "pièces detachées";
          }
         },    
         VENTE {
      public String getString() {
          return "vente en magasin";
      }
    };

    public abstract String getString();
}

private String type;

private int id_reference;

private String numero_serie;

private Timestamp date_ajout;

private String marque;

private String modele;

private float prix_vente;
private double prixHT;
private float tva;

private String etat_produit;
private int id_magasin;

public int getId(){
   return this.id;
}

public void setId(int id){
    this.id=id;
}

public int getIdOnline(){
   return this.id;
}

public void setIdOnline(int id){
    this.id=id;
}

public String getType(){
    return this.type;
}

public void setType(String type){
    this.type=type;
}

public int getIdReference(){
    return this.id_reference;
}

public void setIdReference(int id_reference){
    this.id_reference=id_reference;
}

public String getNumeroSerie(){
    return this.numero_serie;
}

public void setNumeroSerie(String numero_serie){
    this.numero_serie=numero_serie;
}

public Timestamp getDateAjout(){
    return this.date_ajout;
}

public void setDateAjout(Timestamp date_ajout){
    this.date_ajout=date_ajout;
}

public String getMarque(){
    return this.marque;
}

public void setMarque(String marque){
    this.marque=marque;
}

public String getModele(){
    return this.modele;
}

public void setModele(String modele){
    this.modele=modele;
}

public float getPrixVente(){
    return this.prix_vente;
}

public void setPrixVente(float prix){
    this.prix_vente=prix;
}

public double getPrixHT(){
    return this.prixHT;
}

public void setPrixHT(double prix){
    this.prixHT=prix;
}

public float getTVA(){
    return this.tva;
}

public void setTVA(float tva){
    this.tva=tva;
}

public String getEtatProduit(){
    return this.etat_produit;
}

public void setEtatProduit(String etat){
    this.etat_produit=etat;
}

public int getIdMagasin(){
    return this.id_magasin;
}

public void setIdMagasin(int id_magasin){
    this.id_magasin=id_magasin;
}

}

类产品:

    package com.stationphone.db.model;

import java.io.Serializable;
import java.sql.Timestamp;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;

/**
 *
 * @author Administrateur
 */
@Entity
public class Produit implements Serializable {

    @EmbeddedId 
    private ProduitMagasin idPM;

    @OneToOne
@JoinColumn(name = "id_magasin", insertable=false, updatable=false)
Magasin magasin;

public enum Type {
    PIECES {
      public String getString() {
          return "pièces detachées";
      }
     },    
     VENTE {
      public String getString() {
          return "vente en magasin";
      }
    };

    public abstract String getString();
}

private String type;

private int id_reference;

private String numero_serie;

private Timestamp date_ajout;

private float prix_vente;
private float tva;

private String etat_produit;

public ProduitMagasin getIdPM(){
   return this.idPM;
}

public void setIdPM(ProduitMagasin id){
    this.idPM=id;
}

public String getType(){
    return this.type;
}

public void setType(String type){
    this.type=type;
}

public int getIdReference(){
    return this.id_reference;
}

public void setIdReference(int id_reference){
    this.id_reference=id_reference;
}

public String getNumeroSerie(){
    return this.numero_serie;
}

public void setNumeroSerie(String numero_serie){
    this.numero_serie=numero_serie;
}

public Timestamp getDateAjout(){
    return this.date_ajout;
}

public void setDateAjout(Timestamp date_ajout){
    this.date_ajout=date_ajout;
}


public float getPrixVente(){
    return this.prix_vente;
}

public void setPrixVente(float prix){
    this.prix_vente=prix;
}


public float getTVA(){
    return this.tva;
}

public void setTVA(float tva){
    this.tva=tva;
}

public String getEtatProduit(){
    return this.etat_produit;
}

public void setEtatProduit(String etat){
    this.etat_produit=etat;
}

}

我希望我会在这里找到答案。谢谢。

EDIT:post方法:

public static HttpResponse post(Object object, String type){
    HttpResponse response=null;
    try{
    CloseableHttpClient client = HttpClientBuilder.create().build();  
    HttpPost postRequest = new HttpPost(getUrl(type));
    System.out.println(getUrl(type));
    ObjectMapper mapper= new ObjectMapper();
    String jsonInString = mapper.writeValueAsString(object);
    System.out.println(jsonInString);
    StringEntity input = new StringEntity(jsonInString);
    input.setContentType("application/json");
    postRequest.setEntity(input);

    response = client.execute(postRequest);

    if (response.getStatusLine().getStatusCode() != 201) {
        throw new RuntimeException("Failed : HTTP error code : "
            + response.getStatusLine().getStatusCode());

    }

    BufferedReader br = new BufferedReader(
                    new InputStreamReader((response.getEntity().getContent())));

    String output;
    System.out.println("Output from Server .... \n");
    while ((output = br.readLine()) != null) {
        System.out.println(output);
    }
            System.out.println(response.getStatusLine().getStatusCode()+" ");

            client.close();
      } catch (ClientProtocolException e) {

    e.printStackTrace();

  } catch (IOException e) {

    e.printStackTrace();
  } finally{
        return response;
      }

编辑2:tomcat本地错误:

  
    

018-07-24 18:55:32.196 WARN 10860 --- [nio-8084-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver:无法读取HTTP     讯息:

  
     

org.springframework.http.converter.HttpMessageNotReadableException:   JSON解析错误:无效的UTF-8中间字节0x63

     

at [来源:(PushbackInputStream);行:1,列:21];嵌套的   例外是com.fasterxml.jackson.databind.JsonMappingException:   无效的UTF-8中间字节0x63

     

at [来源:(PushbackInputStream);行:1,列:21]

     

at [来源:(PushbackInputStream);行:1,列:16](通过   参考

     

链:com.stationphone.db.model.ProduitDTO [“ type”])

1 个答案:

答案 0 :(得分:0)

感谢tp billy frost该做什么2件事:

HttpPost postRequest = new HttpPost(getUrl(type));
        postRequest.setHeader("Content-Type", "application/json;charset=UTF-8");
StringEntity input = new StringEntity(jsonInString, "UTF-8");