(Resuelto) Cómo configurar el encabezado de la solicitud y los parámetros entrantes al llamar a la interfaz de Fegin

Fenómeno problema:

Recientemente, estoy estudiando cómo usar Fegin para llamar a interfaces de servicios de terceros y establecer encabezados y parámetros de solicitud. Encontré las características de la anotación de método @Header, el atributo de parámetro @RequestHeader y la anotación de método @Requestmapping encabezados de atributo  , así como los atributos de parámetro @RequestParam y atributos de parámetro @Param Y  las características del método de anotación @Requestmapping atributo params  .


análisis del problema:

Observemos un ejemplo de cómo llamar con éxito a la interfaz de Fegin en mi proyecto . Este es un método de interfaz getToken definido en la interfaz de Fegin :

application.properties:

test-url=第三方服务接口ip地址和端口号

TestFegin:

@FeignClient(name = "test", url = "${test-url}")
@Component
public interface TestFegin {
	//获取用户的token
	@PostMapping(value = "/auth/oauth/token",
				headers = {"Authorization=Basic c2FiZXI6c2FiZXJfc2VjcmV0","content-type=application/x-www-form-urlencoded"})
	JSONObject getToken(@RequestHeader("Tenant-Id") String tenantId,
	                    @RequestParam(value = "grant_type", defaultValue = "password") String grantType,
	                    @RequestParam("username") String username,
	                    @RequestParam("password") String password);
}

TestController:

@CrossOrigin
@RestController
public class TestController {

    @Autowired TestFegin testFegin;

	/**
	 * 获取token
	 *
	 * @return
	 */
	@PostMapping("/getToken")
	public JSONObject getToken(@RequestBody JSONObject jsonObject) {
		JSONObject response = new JSONObject();
		if ( isLogin ) {
			response.put("status", "fail");
			response.put("msg", "登录失败!");
		}
		String tenantId = jsonObject.getString("tenantId");
		String username = jsonObject.getString("username");
		String password = jsonObject.getString("password");
    JSONObject tokenInfo = testFegin.getToken(tenantId, "password", username, password);
		response.put("msg", "成功");
		response.put("code", 200);
		response.put("data", tokenInfo);
	    return response;
    }
}

Resultados de la prueba:

Se pueden aprender algunos conocimientos de este ejemplo:

1. En la propiedad de encabezados de @Requestmapping (incluido GetMapping / PostMapping) , puede establecer el encabezado de la solicitud:

Ventajas: de esta manera, puede establecer automáticamente la información predeterminada del encabezado de solicitud de la interfaz , por lo que la llamada requiere encabezados de solicitud entrantes , cuyos encabezados de solicitud son una interfaz fija cuando puede usar esta forma.

 

2. @RequestHeader, utilizado para pasar manualmente la información del encabezado de la solicitud.

Características: Puede pasar manualmente la información del encabezado de la solicitud personalizada a la interfaz de Fegin.

 

3. Anotación de método @Header y @Requestmapping (incluido GetMapping / PostMapping) atributo de encabezados , se dice que el uso y la función son casi los mismos, así que lo probé y descubrí que no funciona. Se puede ver que los rumores son falsos, y se estima que también lo son ¿Cuáles son las desventajas,

Debido a que el método anotado @Header ha sido abandonado , y ahora es una necesidad básica de esta manera, por lo que no se recomienda que use la anotación , compañero interesado, puede ir a aprender más sobre:

	//获取用户的token
	@Headers({"Authorization=Basic c2FiZXI6c2FiZXJfc2VjcmV0","content-type=application/x-www-form-urlencoded"})
	@PostMapping(value = "/blade-auth/oauth/token")
	JSONObject getToken(@RequestHeader("Tenant-Id") String tenantId,
	                    @RequestParam(value = "grant_type", defaultValue = "password") String grantType,
	                    @RequestParam("username") String username,
	                    @RequestParam("password") String password);

 

4. @RequestParam: Se utiliza para pasar parámetros a la interfaz . El parámetro determinará la forma de existencia del parámetro de acuerdo con el valor del atributo del tipo de contenido del encabezado de la solicitud . Por ejemplo, en el ejemplo, son datos de formulario ( application / x-www-form-urlencoded ) Existe, y de forma predeterminada, existe en la forma en que la barra de direcciones es visible . Se dice que el atributo defaultValue puede establecer valores predeterminados  como:

http: // ip: puerto? parámetro1 = valor1 & parámetro2 = valor2 ...

Si desea utilizar el estilo de existencia relajante  , utilizará @PathVariable.

 

5. Parámetros de  atributo @ Requestmapping : se usa para limitar la lista de parámetros de la interfaz. Solo cuando se cumplen las condiciones, la interfaz se puede llamar con éxito, de lo contrario, será interceptada y la llamada de la interfaz fallará. La prueba encuentra que no hay ventaja .

	//获取用户的token
	@PostMapping(value = "/blade-auth/oauth/token",
				headers = {"Authorization=Basic c2FiZXI6c2FiZXJfc2VjcmV0","content-type=application/x-www-form-urlencoded"},
				params = {"grant_type=password"})
	JSONObject getToken(@RequestHeader("Tenant-Id") String tenantId,
	                    @RequestParam(value = "grant_type", defaultValue = "password") String grantType,
	                    @RequestParam("username") String username,
	                    @RequestParam("password") String password);

Desventajas: el valor del parámetro predeterminado no se puede establecer automáticamente como el atributo de encabezados, y el valor del parámetro aún debe pasarse manualmente.

 

6. @Param, esta anotación se usa a menudo en la capa dao / mapper como una anotación de parámetro.

Características: puede ser una llamada de método , el parámetro codificado entrante, pero no requiere la lista de parámetros para definir el método de paso del parámetro de orden , a menudo anotaciones sobre parámetros que tienen una pluralidad de métodos abstractos en los parámetros de la capa dao.

capas de dao:

    List<JSONObject> getInfoJson(@Param("tableName") String tableName, @Param("columns") String columns, @Param("where") String where);

 

Supongo que te gusta

Origin blog.csdn.net/weixin_42585386/article/details/112832774
Recomendado
Clasificación