首页 > 解决方案 > 使用 volley 和 SpringBoot 提交 post 请求时出错

问题描述

我正在创建一个应用程序来上传照片以存储在服务器上。但是,通过 Post 发送请求时出现以下错误:

Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded' not supported]

我已经研究了一切,看到了一些替代方案,但没有一个能解决我的问题。我不知道如何想出一个解决方案。

我的 API 服务:

@RestController
@RequestMapping(value = "/api")
public class Services {

@Autowired
private PacienteRepository pr;

@GetMapping("/pacientes")
public List<Paciente> listaPaciente() {
    return pr.findAll();
}

@RequestMapping(value = "/paciente", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public Paciente cadastraPaciente(@RequestBody Paciente paciente) {

    System.out.println(paciente.foto);
    return pr.save(paciente);
}

}

我的应用程序:

public class MainActivity extends AppCompatActivity {

public static final String REGISTER_URL = "http://192.168.1.8:8080/api/paciente";
public static final String KEY_IMAGE = "foto";
String foto = "null";
public static final String TAG = "LOG";
private ProgressDialog progressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button enviar = (Button) findViewById(R.id.enviar);


    enviar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            registerForms();

        }
    });
}

public void tirarFoto(View view) {
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    startActivityForResult(intent, 0);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data != null) {
        Bundle bundle = data.getExtras();
        if (bundle != null) {
            Bitmap img = (Bitmap) bundle.get("data");
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            img.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            foto = Base64.encodeToString(stream.toByteArray(), Base64.DEFAULT);
            Toast toast = Toast.makeText(getApplicationContext(), "Foto anexada", Toast.LENGTH_LONG);
            toast.show();
        }
    }
}


@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

public void registerForms() {

    StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            /*if (response.contains("Erro")) {
                //progressDialog.dismiss();
                Toast.makeText(MainActivity.this, "Erro ao enviar", Toast.LENGTH_LONG).show();
                Log.i(TAG, "Lat: " + "Caiu aqui");
            } else {*/
                //progressDialog.dismiss();
                Intent intent = new Intent(MainActivity.this, MainActivity.class);
                Toast.makeText(MainActivity.this, "Enviado com sucesso!", Toast.LENGTH_LONG).show();
                startActivity(intent);
            //}

        }
    },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                  //progressDialog.dismiss();
                    Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show();
                    Log.i(TAG, "Lat: " + error.getMessage());
                    Log.i(TAG, "String: " + foto);
                }
            }) {


        @Override
        public byte[] getBody() throws AuthFailureError {

            String requestBody = "";  //The request body goes in here.


            try {
                return requestBody.getBytes("utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
                return null;
            }
        }

        @Override
        protected Map<String, String> getParams() throws AuthFailureError{
            Map<String, String> map = new HashMap<String, String>();
            map.put("Content-Type","application/x-www-form-urlencoded");
            map.put(KEY_IMAGE, "foto1");
            return map;

        }
    };
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}
}

我正在使用以下版本的凌空:

implementation 'com.android.volley:volley:1.1.1'

标签: javaandroidrestspring-boot

解决方案


推荐阅读