3

JAX-RS に関するプロジェクト (宿題) があります。NetBeans、Jersey、および Tomcat を使用しています。

ここに画像の説明を入力

これは、システムのメイン オブジェクトの「ユーザー」クラスです。

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="user")
public class User {
    
    //@XmlElement
    //public int id ;
    @XmlElement
    public String username;
    @XmlElement
    public String fullname;
    @XmlElement
    public String gender;
    @XmlElement
    public String birthDate;
    
    public User(){
        
    }
    
    public User(String username,String fullname, String gender,String birthDate){
        
        //this.id = id;
        this.username = username;
        this.fullname = fullname;
        this.gender = gender;
        this.birthDate = birthDate;
    }
    
}

これは私の「JAXBContextResolver」クラスです

import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.api.json.JSONJAXBContext;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import javax.xml.bind.JAXBContext;


@Provider
public class JAXBContextResolver implements ContextResolver<JAXBContext>{
    
    private JAXBContext context;
    private Class[] types = {User.class};
    
    
    public JAXBContextResolver() throws Exception {
        
        this.context = 
        new JSONJAXBContext(  JSONConfiguration.mapped().build(), types); 
    }
                    
    @Override
    public JAXBContext getContext(Class<?> objectType) {
         for (Class type : types) {
             if (type == objectType) {
                 return context;
             }
         }
        
        return null;
        
    }
    
}

そして、これは「UserService」クラスの投稿メソッドです

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON) 
    public List<User> createNewUser(User tUser)  {
        List<User> list = new ArrayList<User>();
        
        list.add(tUser);
            
            
        
        return list;
    }

RESTClient(Firefoxアドオン)を使用してローカルホストに新しいユーザーを投稿しようとすると、リクエストボディは次のようなjson入力になります。

{"user":{"username":"blabla","fullname":"blabla","gender":"M","birthDate":"05.01.1978"}}

post メソッド (UserService クラス内) では、変数 "tUser" に次の入力を自動的に入力する必要がありますか? 「tUser」変数は、次のようにデバッグ モードで null 要素を表示します。

ここに画像の説明を入力

私が間違っていることを知っていたら、誰かが私を訂正してくれませんか? この値が null を表示するのはなぜですか? "blabla" - "blabla" - "M" - "05.01.1878" と表示されてはいけませんか? 私を手伝ってくれますか?

4

2 に答える 2

2

この問題を解決しました。JAXBContextResolver クラスで、次のようにメソッドを変更します。

public JAXBContextResolver() throws Exception {

        this.context = 
        new JSONJAXBContext(  JSONConfiguration.mapped().rootUnwrapping(false).build(), types); 
}

最初のものとの違いは、「rootUnwrapping(false)」式を追加したことです。

于 2013-01-21T12:01:02.517 に答える
0

@XmlRootElementあなたの例では機能していません。送信

{"username":"blabla","fullname":"blabla","gender":"M","birthDate":"05.01.1978"}  

代わりに
EDIT
1)

public List<User> createNewUser(Request tUser)  

とクラス

class Request
{
   public User user;
}  

2)

public List<User> createNewUser(String tUser)  

またはStringを使用してオブジェクトに変換しますgoogle-gsonjackson json processor

于 2013-01-21T10:51:05.300 に答える