2017-08-02 2 views
0

enter image description hereprintemps ne peut pas recevoir après param envoyer par postier

Et Mon contrôleur est comme

@RequestMapping(value = "/auth/company/delete", method = RequestMethod.POST, 
     produces = {"application/json", "application/xml"}) 
@ResponseBody 
public ResponseMessage deleteCompany(@RequestParam("companyId") Integer companyId) { 
    return companyManageService.deleteCompany(companyId); 
} 

Mais quand je tape le code dans la console de chrome en utilisant

$.post("http://ltc_dev.leapstack.cn/gw/security/auth/company/delete", { companyId: 1 }) 
    .done(function(data) { 
    alert(data.success); 
    alert(data.message); 
    }); 

J'ai reçu une réponse correcte , donc ..... Je ne sais pas si c'est un bug du postier, ou je cofig le contrôleur faux

+1

Ce n'est pas requestParam que vous envoyez via un facteur. C'est le requestBody. Si vous voulez l'envoyer en paramètre, votre URL devrait être **/auth/company/delete? CompanyId = 2 ** – barbakini

+0

@barbakini même j'ai changé #RequestParam en #RequestBody Cela ne fonctionne toujours pas, et j'ai essayé de changer companyId de Entier à String aveC#RequestBody et valeur obtenue en tant que "companyId": 2 à la place si 2! –

+0

Avez-vous essayé en tant que **/auth/company/delete? CompanyId = 2 **? En cas de modification de requestBody, votre méthode doit obtenir un objet Map non String ou Integer. like ** deleteCompany (corps de la carte @RequestBody) ** body.get ("candidateId) – barbakini

Répondre

1

Dans votre question, votre méthode de contrôleur essaie de prendre companyId comme paramètre de requête. En postier vous envoyez companyId dans le corps de la requête. Comme je l'ai dit dans le commentaire, vous pouvez envoyer la demande param dans la section url directement comme ça: /auth/company/delete? CompanyId = 2. Spring boot peut détecter le paramètre de demande companyId et l'affecter directement à la variable companyId de la méthode.

Si vous voulez envoyer companyId dans le corps de la demande (Vous avez dit que dans le commentaire) vous devez changer la signature de votre méthode comme ci-dessous.

@RequestMapping(value = "/auth/company/delete", method = RequestMethod.POST, produces = {"application/json", "application/xml"}) 
@ResponseBody 
public ResponseMessage deleteCompany(@RequestBody Map<String, Integer> map) { 
    return companyManageService.deleteCompany(map.get("companyId")); 
} 

Ou:

@RequestMapping(value = "/auth/company/delete", method = RequestMethod.POST, produces = {"application/json", "application/xml"}) 
@ResponseBody 
public ResponseMessage deleteCompany(@RequestBody CompanyDTO company) { 
    return companyManageService.deleteCompany(company.getCompanyId); 
} 

public class CompanyDTO { 
    private Integer companyId; 

//getter setter 
} 

Si vous voulez utiliser le corps de demande et que vous voulez prendre valeur entière directement dans la variable méthode du contrôleur en entier votre corps de la demande devrait être comme:

{2} 

Et la méthode de contrôleur devrait être comme:

@RequestMapping(value = "/auth/company/delete", method = RequestMethod.POST, produces = {"application/json", "application/xml"}) 
@ResponseBody 
public ResponseMessage deleteCompany(@RequestBody Integer companyId) { 
    return companyManageService.deleteCompany(companyId); 
}