2011-03-04 71 views
2

我已經建立了這個簡單的Java類:JAX-RS和JSON搞砸

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class Person { 
    private int id; 
    private String name; 
    private String gender;  

    public Person() {  
    } 

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

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

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setGender(String gender) { 
     this.gender = gender; 
    } 

    public String getGender() { 
     return this.gender; 
    }   
} 

現在使用JAX-RS我instatiating並返回這個類作爲JSON像這樣;

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 

@Path(value="/addresses") 
public class AddressBook extends Person { 

    public AddressBook() { 

    }  

    @GET  
    @Produces("application/json;charset=iso-8891-1")  
    public Person getList() { 

     Person p1 = new Person(); 
     p1.setName("táòt"); 
     p1.setId(1); 
     p1.setGender("M"); 

     return p1; 
    } 

} 

我的servlet初始化類是這樣的:

import java.util.HashSet; 
import java.util.Set; 
import javax.ws.rs.core.Application; 

public class AddressBookApplication extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> classes = new HashSet<Class<?>>(); 
     classes.add(AddressBook.class); 
     return classes; 
    } 
} 

我得到的JSON結果是這樣的:

{"person":{"name":"t\u00e1\u00f2t","gender":"M","id":"1"}} 

正如你所看到的JSON字符串就是Java編碼我拉我的頭髮爲什麼發生這種情況,我該如何克服這個...

幫助將是讚賞...

回答

2

信不信由你,結果很好。它不是Java編碼,它只是將非ASCII字符作爲unicode代碼點(\ u ...)返回。像JSON一樣加載到Javascript中,你會發現它會打印並解碼它:

>>> p={"person":{"name":"t\u00e1\u00f2t","gender":"M","id":"1"}} 
    >>> p.person.name 
    "táòt"