2017-03-07 43 views
1

是新的Android新手可以任何一个回答这个问题,我试了很多,但没有找到正确stuff.i想发送我的自定义用户对象到春天REST服务如何使用自定义对象使用凌空在Android android

Employee对象: 在Android和春天

public class Employee{ 
     String firstname; 
     String lastname; 

//setters and getter goes here 
     } 

GsonRequest:

public class GsonRequest<T> extends Request<T> { 
     public final Gson gson = new Gson(); 
     private final Class<T> clazz; 
     private final Map<String, String> headers; 
     private final Response.Listener<T> listener; 
     private final Object dataIn; 

     /** 
     * Make a GET request and return a parsed object from JSON. 
     * 
     * @param url  URL of the request to make 
     * @param clazz Relevant class object, for Gson's reflection 
     * @param headers Map of request headers 
     */ 
     public GsonRequest(String url, Class<T> clazz, Map<String, String> headers, 
          Response.Listener<T> listener, Response.ErrorListener errorListener) { 
      super(Method.GET, url, errorListener); 
      this.clazz = clazz; 
      this.headers = headers; 
      this.listener = listener; 
      this.dataIn = null; 
     } 

     public GsonRequest(String url, Object dataIn, Class<T> clazz, Map<String, String> headers, 
          Response.Listener<T> listener, Response.ErrorListener errorListener) { 
      super(Method.POST, url, errorListener); 
      this.dataIn = dataIn; 
      this.clazz = clazz; 
      this.headers = headers; 
      this.listener = listener; 

     } 

     @Override 
     public byte[] getBody() throws AuthFailureError { 
      return gson.toJson(dataIn).getBytes(); 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      return headers != null ? headers : super.getHeaders(); 
     } 

     @Override 
     protected void deliverResponse(T response) { 
      listener.onResponse(response); 
     } 

     @Override 
     protected Response<T> parseNetworkResponse(NetworkResponse response) { 
      try { 
       String json = new String(
         response.data, 
         HttpHeaderParser.parseCharset(response.headers)); 
       return Response.success(
         gson.fromJson(json, clazz), 
         HttpHeaderParser.parseCacheHeaders(response)); 
      } catch (UnsupportedEncodingException e) { 
       return Response.error(new ParseError(e)); 

      } 
     } 
    } 

主要活动:

public class MainActivity extends AppCompatActivity { 
    Button clickbtn; 
    TextView resText; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_layout); 
clickbtn=(Button)findViewById(R.id.mybutton); 
     resText=(TextView)findViewById(R.id.mytext); 


    clickbtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Employee emp=new Employee(); 
      emp.setFirstname("naresh"); 
      RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); 

      GsonRequest<Employee> myReq = new GsonRequest<Employee>("http://192.168.10.37:8088/adduser", 
        emp, 
        Employee.class, 
        new HashMap<String, String>(), 
        new Response.Listener<Employee>() { 
         @Override 
         public void onResponse(Employee response) { 

         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          Toast.makeText(getApplicationContext(),"error", Toast.LENGTH_SHORT).show(); 
          Log.i("post error","post error",error); 
resText.setText(error.getMessage()); 
          Log.d("post error","post error",error); 
         } 
        }); 


      queue.add(myReq); 




     } 
    }); 

    } 
} 

弹簧安置服务:

@RequestMapping("adduser") 
public void addUser(@Requestbody User user){ 
Sysetm.out.println(user.getFirstname()); 
} 

例外:

  at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 
E/Volley: [216] BasicNetwork.performRequest: Unexpected response code 415 for http://192.168.10.37:8088/adduser 
I/post error: post error 
       com.android.volley.ServerError 
        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:163) 
        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 
D/post error: post error 
       com.android.volley.ServerError 
        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:163) 
        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112) 
+0

尝试添加'headers.put(“Content-Type”,“application/json; charset = utf-8”);'getHeaders()'内'' – BNK

+1

非常感谢@ BNK,它工作正常。你添加为答案 –

回答

1

正如我的评论,请加headers.put("Content-Type", "application/json; charset=utf-8");getHeaders()