@produces在spring mvc中是什么意思@RequestMapping(value = https://www.zaoxu.com/jjsh/bkdq/"/produces", produces = "application/json"):表示将功能处理方法将生产json格式的数据,此时根据请求头中的Accept进行匹配,如请求头“Accept:application/json”时即可匹配;
@RequestMapping(value = https://www.zaoxu.com/jjsh/bkdq/"/produces", produces = "application/xml"):表示将功能处理方法将生产xml格式的数据 , 此时根据请求头中的Accept进行匹配 , 如请求头“Accept:application/xml”时即可匹配 。
此种方式相对使用@RequestMapping的“headers = "Accept=application/json"”更能表明你的目的 。
服务器控制器代码详解cn.javass.chapter6.web.controller.consumesproduces.ProducesController;
客户端代码类似于之前的Content-Type中的客户端,详见ProducesController.java代码 。
当你有如下Accept头:
①Accept:text/html,application/xml,application/json
将按照如下顺序进行produces的匹配 ①text/html ②application/xml ③application/json
②Accept:application/xml;q=0.5,application/json;q=0.9,text/html
将按照如下顺序进行produces的匹配 ①text/html ②application/json ③application/xml
q参数为媒体类型的质量因子,越大则优先权越高(从0到1)
③Accept:*/*,text/*,text/html
将按照如下顺序进行produces的匹配 ①text/html ②text/* ③*/*
即匹配规则为:最明确的优先匹配 。
代码详见ProducesPrecedenceController1、ProducesPrecedenceController2、ProducesPrecedenceController3 。
三、窄化时是覆盖 而 非继承
如类级别的映射为 @RequestMapping(value=https://www.zaoxu.com/jjsh/bkdq/"/narrow", produces="text/html"),方法级别的为@RequestMapping(produces="application/xml") , 此时方法级别的映射将覆盖类级别的 , 因此请求头“Accept:application/xml”是成功的,而“text/html”将报406错误码,表示不支持的请求媒体类型 。
详见cn.javass.chapter6.web.controller.consumesproduces.NarrowController 。
只有生产者/消费者 模式 是 覆盖,其他的使用方法是继承,如headers、params等都是继承 。
四、组合使用是“或”的关系
@RequestMapping(produces={"text/html", "application/json"}) :将匹配“Accept:text/html”或“Accept:application/json” 。
五、问题
消费的数据 , 如JSON数据、XML数据都是由我们读取请求的InputStream并根据需要自己转换为相应的模型数据,比较麻烦;
生产的数据,如JSON数据、XML数据都是由我们自己先把模型数据转换为json/xml等数据,然后输出响应流,也是比较麻烦的 。
java注解里produces = MediaType和consumes = MediaType分别是什么意思这个是定义该方法,是一个返回的方法,同时定义返回的类型
produces the date是什么意思?生成数据
a big building that produces energy是什么词的意思?名词后面带了一个定语从句,意思是会产生能量的大楼 。
distance produces beauty什么意思distance produces beauty
距离产生美
@produces在spring mvc中是什么意思就是服务输出接口注解,意思是生产端
springmvc 没有produces注释有两种方法:
1.返回字符串时,将字符串结果转换
return new String("你好".getBytes(), "ISO-8859-1");
2.添加@RequestMapping注解,配置produces的值
@RequestMapping(value
=
"/add",
produces
=
{"application/json;charset=UTF-8"})
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面 。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块 。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等 。
由于我是为了使用JSONP协议 , 需要连同callback一起返回,所以我定义的是
@RequestMapping(value = https://www.zaoxu.com/jjsh/bkdq/"/add", params = {"callback"}, produces = {"text/javascript;charset=UTF-8"})
我使用springmvc的时候发现在produces注解没有我使用springmvc的时候发现在produces注解没有
开始-运行-gpedit.msc,打开组策略,用户配置下面,展开管理模版,双击系统文件夹,在右面的窗口中,有一项"不要运行指定的windows应用程序",双击,然后选择-已启用-显示,把要禁止运行的程序添进去,比如qq.exe. ,qqgame.exe等等.也可以设置"只运行许可的windows应用程序".
另一方法,通过修改注册表来实现为了安全性起见,我们可能希望有些带有危险性的程序不让用户去运行 。这可以通过注册表来实现 。例如我们想禁止用户运行记事本(
notepad.exe)和计算器(cal.Exe) 。
首先在注册表项HKEY_CURRENT_USER\Software\Microsoft \Windows\CurrentVersion\Policies\Explorer中,新建一个双字节值项DisallowRun,修改其值为1,以允许我们定义禁止允许的程序,然后新建一个注册表项HKEY_CURRENT_USER\Software\Microsoft\ Windows\Current Version\Policies\Explorer\DisallowRun,在其下新建两个字符串值项 。第一个值项的名称为1,值为notepad.exe,第二个值项为2,值为calc%
springMVC 解决中文乱码时使用produces报错?RequestMapping中并没有produces这个属性 , 不知道你哪里搜来的,编译器也告诉你了只能选填这四个属性 。我琢磨着你说的中文乱码是什么情况?text/html;charset=utf-8这段不是加在.jsp文件里的吗?嗷 不对,是有的:是不是你的spring版本太低了,我这个是spring-web-4.3.6.RELEASE.jar里的是支持的
springmvc中@RequestMapping的参数consumes无效简介:@RequestMappingRequestMapping是一个用来处理请求地址映射的注解 , 可用于类或方法上 。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径 。RequestMapping注解有六个属性 , 下面我们把她分成三类进行说明 。1、 value,method;value:指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);method:指定请求的method类型,GET、POST、PUT、DELETE等;2、 consumes , produces;consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;3、 params,headers;params: 指定request中必须包含某些参数值是,才让该方法处理 。headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求 。示例:1、value/ method 示例默认RequestMapping("....str...")即为value的值;[java] view plaincopy@Controller@RequestMapping("/appointments")public class AppointmentsController {private final AppointmentBook appointmentBook;@Autowiredpublic AppointmentsController(AppointmentBook appointmentBook) {this.appointmentBook = appointmentBook;}@RequestMapping(method = RequestMethod.GET)public Map get() {return appointmentBook.getAppointmentsForToday();}@RequestMapping(value=https://www.zaoxu.com/jjsh/bkdq/"/{day}", method = RequestMethod.GET)public Map getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) {return appointmentBook.getAppointmentsForDay(day);}@RequestMapping(value="/new", method = RequestMethod.GET)public AppointmentForm getNewForm() {return new AppointmentForm();}@RequestMapping(method = RequestMethod.POST)public String add(@Valid AppointmentForm appointment, BindingResult result) {if (result.hasErrors()) {return "appointments/new";}appointmentBook.addAppointment(appointment);return "redirect:/appointments";}}value的uri值为以下三类:A) 可以指定为普通的具体值;B)可以指定为含有某变量的一类值(URI Template Patterns with Path Variables);C) 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);example B)[java] view plaincopy@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)public String findOwner(@PathVariable String ownerId, Model model) {Owner owner = ownerService.findOwner(ownerId);model.addAttribute("owner", owner);return "displayOwner";}example C)[java] view plaincopy@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:/d/d/d}.{extension:/.[a-z]}")public void handle(@PathVariable String version, @PathVariable String extension) {// ...}}2 consumes、produces 示例cousumes的样例:[java] view plaincopy@Controller@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")public void addPet(@RequestBody Pet pet, Model model) {// implementation omitted}方法仅处理request Content-Type为“application/json”类型的请求 。produces的样例:[java] view plaincopy@Controller@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")@ResponseBodypublic Pet getPet(@PathVariable String petId, Model model) {// implementation omitted}方法仅处理request请求中Accept头中包含了"application/json"的请求,同时暗示了返回的内容类型为application/json;3 params、headers 示例params的样例:[java] view plaincopy@Controller@RequestMapping("/owners/{ownerId}")public class RelativePathUriTemplateController {@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {// implementation omitted}}仅处理请求中包含了名为“myParam” , 值为“myValue”的请求;headers的样例:[java] view plaincopy@Controller@RequestMapping("/owners/{ownerId}")public class RelativePathUriTemplateController {@RequestMapping(value = "/pets", method = RequestMethod.GET, headers="Referer=http://www.ifeng.com/")public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {// implementation omitted}}仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.ifeng.com/”的请求;上面仅仅介绍了,RequestMapping指定的方法处理哪些请求 , 下面一篇将讲解怎样处理request提交的数据(数据绑定)和返回的数据 。
请教myeclipse中@POST @Path @Produces @Consumes @Singleton @XmlRootElement这些是什么意思啊jdk1.5的新语法:注解
在jdk1.4中使用是会报错的!
接口中的produces对应的是accept吗这是哪个类的方法?能具体点吗?
参所代表的数字是汉字叁吧,代表了数字3
各位大侠,jersey rest 里面get方法@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }没有json数据类型的解析器,你引入jersey-json这个包试试
@Consumes @Produces分别表示入参和出参数吗
文章插图
@Consumes 注释表示的接受指定的MIME格式 , 只有符合这个参数设置的请求再能访问到这个资源 。比如@Consumes("application/x-www-form-urlencoded") 。@Produces 注释表示的指定返回MIME格式,资源按照那种数据格式返回,可取的值有:MediaType.APPLICATION_XXX 。比如:@Produces(MediaType.APPLICATION_XML) 。这两个都是jersey常用的注解解释 。扩展资料:jersey常用的其他注解解释:@GET表示查询请求 , 相当于数据库的查询数据操作; @PUT表示插入请求,相当于数据库的插入数据操作;@POST表示更新请求,相当于数据库的更新数据操作 ;@DELETE 表示删除请求,相当于数据的删除数据操作 ;@PathParam表示uri路径参数,写在方法的参数中,获得请求路径参数 。比如:@PathParam("username") String userName; @QueryParam表示uri路径请求参数,写在方法的参数中 , 获得请求路径附带的参数 。比如:@QueryParam("desc") String desc 。参考资料:百度百科-Jersey
关于Spring MVC中@ResponseBody怎么知道我需要什么类型@ResponseBody注解在 method上具体返回什么类型的数据流(json、xml等)主要有两个方面决定的:1. 是否有对应的第三方jar包出现在classpath,比如jackson jar、jaxb2
jar,如果只存在spring mvc就会注册对应的HttpMessageConvert(将return
obj写为response的流是靠httpMessageConvert的实现类来完成的) 2.
有@RequestMapping注解的consumes具体的mediaTypes和http请求的accept能结束的mime
type来联合决定 。
有这两点决定@ResponseBody注解的返回值的返回流的类型具体的实现参见
RequestResponseBodyMthodProcessor , java中,具体的写流实现如下在
AbstractMessageConverterMethodProcessor.writeWithMessageConverters()来实现
的 。具体代码
/**
* Writes the given return type to the given output message.
*
* @param returnValue the value to write to the output message
* @param returnType the type of the value
* @param inputMessage the input messages. Used to inspect the {@code Accept} header.
* @param outputMessage the output message to write to
* @throws IOException thrown in case of I/O errors
* @throws HttpMediaTypeNotAcceptableException thrown when the conditions indicated by {@code Accept} header on
* the request cannot be met by the message converters
*/
@SuppressWarnings("unchecked")
protectedvoid writeWithMessageConverters(T returnValue,
MethodParameter returnType,
ServletServerHttpRequest inputMessage,
ServletServerHttpResponse outputMessage)
throws IOException, HttpMediaTypeNotAcceptableException {
Class returnValueClass = returnValue.getClass();
HttpServletRequest servletRequest = inputMessage.getServletRequest();
List requestedMediaTypes = getAcceptableMediaTypes(servletRequest);
List producibleMediaTypes = getProducibleMediaTypes(servletRequest, returnValueClass);
Set compatibleMediaTypes = new LinkedHashSet();
for (MediaType r : requestedMediaTypes) {
for (MediaType p : producibleMediaTypes) {
if (r.isCompatibleWith(p)) {
compatibleMediaTypes.add(getMostSpecificMediaType(r, p));
}
}
}
if (compatibleMediaTypes.isEmpty()) {
throw new HttpMediaTypeNotAcceptableException(producibleMediaTypes);
}
List mediaTypes = new ArrayList(compatibleMediaTypes);
MediaType.sortBySpecificityAndQuality(mediaTypes);
MediaType selectedMediaType = null;
for (MediaType mediaType : mediaTypes) {
if (mediaType.isConcrete()) {
selectedMediaType = mediaType;
break;
}
else if (mediaType.equals(MediaType.ALL) || mediaType.equals(MEDIA_TYPE_APPLICATION)) {
selectedMediaType = MediaType.APPLICATION_OCTET_STREAM;
break;
}
}
if (selectedMediaType != null) {
selectedMediaType = selectedMediaType.removeQualityValue();
for (HttpMessageConverter messageConverter : messageConverters) {
if (messageConverter.canWrite(returnValueClass, selectedMediaType)) {
((HttpMessageConverter) messageConverter).write(returnValue, selectedMediaType, outputMessage);
if (logger.isDebugEnabled()) {
logger.debug("Written [" + returnValue + "] as \"" + selectedMediaType + "\" using [" +
messageConverter + "]");
}
return;
}
}
}
throw new HttpMediaTypeNotAcceptableException(allSupportedMediaTypes);
}
这段java代码中的 @符号都是什么作用?@符合都是注释的作用
@GET是获取方法
@Path("/hosts")服务器
@Produces(MediaType.APPLICATION_JSON)存储过程
springMVC的Form formPreview = new Form();
public Leaf(string name) : base(name) { }
public override void Add(Component c)
{
Console.WriteLine("Cannot add to a leaf");
}
public override void Remove(Component c)
{
Console.WriteLine("Cannot remove to a leaf");
}
public override void Display(int depth)
{
Console.WriteLine(new string('-',depth)+name);
}
}
springmvc中@requestmapping注解中的value属性可以不写吗如果用注解方式的话应该不行吧 , @RequestMapping这个是用来进行地址映射的,通过他才可以找到用什么方法处理请求啊,但是@RequestMapping里面可以用变量和正则表示
SpringMVC @RequestMapping 请问为什么会出现这样的结果?首先@RequestMapping注解没有path属性,另外配置文件中的prefix属性值写错了,WEB-INF前面要加/
springmvc中的requestmapping注解怎么实现的使用@RequestMapping注解时,配置的信息最后都设置到了RequestMappingInfo中.
RequestMappingInfo封装了PatternsRequestCondition,RequestMethodsRequestCondition,ParamsRequestCondition等,所以自己不干活,所有的活都是委托给具体的condition处理.
先看下封装的RequestCondition吧,之前的文章将的比较细了,不清楚各个类具体是做什么的,可以移步这里
1 package org.springframework.web.servlet.mvc.method;
2 public final class RequestMappingInfo implements RequestCondition {
3
4private final PatternsRequestCondition patternsCondition;
5
6private final RequestMethodsRequestCondition methodsCondition;
7
8private final ParamsRequestCondition paramsCondition;
9
10private final HeadersRequestCondition headersCondition;
11
12private final ConsumesRequestCondition consumesCondition;
13
14private final ProducesRequestCondition producesCondition;
15
16private final RequestConditionHolder customConditionHolder;
17 }
初始化没什么好看的,直接看接口的实现吧.
貌似combine也没啥料,就是分别委托
1/**
2* Combines "this" request mapping info (i.e. the current instance) with another request mapping info instance.
3* Example: combine type- and method-level request mappings.
4* @return a new request mapping info instance; never {@code null}
5*/
6public RequestMappingInfo combine(RequestMappingInfo other) {
7PatternsRequestCondition patterns = this.patternsCondition.combine(other.patternsCondition);
8RequestMethodsRequestCondition methods = this.methodsCondition.combine(other.methodsCondition);
9ParamsRequestCondition params = this.paramsCondition.combine(other.paramsCondition);
10HeadersRequestCondition headers = this.headersCondition.combine(other.headersCondition);
11ConsumesRequestCondition consumes = this.consumesCondition.combine(other.consumesCondition);
12ProducesRequestCondition produces = this.producesCondition.combine(other.producesCondition);
13RequestConditionHolder custom = this.customConditionHolder.combine(other.customConditionHolder);
14
15return new RequestMappingInfo(patterns, methods, params, headers, consumes, produces, custom.getCondition());
16}
getMatchingCondition只是体现出可能基于性能消耗的考虑,把PatternsRequestCondition和RequestConditionHolder的比较放到后面单独处理了.
1/**
2* Checks if all conditions in this request mapping info match the provided request and returns
3* a potentially new request mapping info with conditions tailored to the current request.
4* For example the returned instance may contain the subset of URL patterns that match to
5* the current request, sorted with best matching patterns on top.
6* @return a new instance in case all conditions match; or {@code null} otherwise
7*/
8public RequestMappingInfo getMatchingCondition(HttpServletRequest request) {
9RequestMethodsRequestCondition methods = methodsCondition.getMatchingCondition(request);
10ParamsRequestCondition params = paramsCondition.getMatchingCondition(request);
11HeadersRequestCondition headers = headersCondition.getMatchingCondition(request);
12ConsumesRequestCondition consumes = consumesCondition.getMatchingCondition(request);
13ProducesRequestCondition produces = producesCondition.getMatchingCondition(request);
14
15if (methods == null || params == null || headers == null || consumes == null || produces == null) {
16return null;
17}
18
19PatternsRequestCondition patterns = patternsCondition.getMatchingCondition(request);
20if (patterns == null) {
21return null;
22}
23
24RequestConditionHolder custom = customConditionHolder.getMatchingCondition(request);
25if (custom == null) {
26return null;
27}
28
29return new RequestMappingInfo(patterns, methods, params, headers, consumes, produces, custom.getCondition());
30}
compareTo就是排了个不同RequestCondition的优先级
1/**
2* Compares "this" info (i.e. the current instance) with another info in the context of a request.
3* Note: it is assumed both instances have been obtained via
4* {@link #getMatchingCondition(HttpServletRequest)} to ensure they have conditions with
5* content relevant to current request.
6*/
7public int compareTo(RequestMappingInfo other, HttpServletRequest request) {
8int result = patternsCondition.compareTo(other.getPatternsCondition(), request);
9if (result != 0) {
10return result;
11}
12result = paramsCondition.compareTo(other.getParamsCondition(), request);
13if (result != 0) {
14return result;
15}
16result = headersCondition.compareTo(other.getHeadersCondition(), request);
17if (result != 0) {
18return result;
19}
20result = consumesCondition.compareTo(other.getConsumesCondition(), request);
21if (result != 0) {
22return result;
23}
24result = producesCondition.compareTo(other.getProducesCondition(), request);
25if (result != 0) {
26return result;
27}
28result = methodsCondition.compareTo(other.getMethodsCondition(), request);
29if (result != 0) {
30return result;
31}
32result = customConditionHolder.compareTo(other.customConditionHolder, request);
33if (result != 0) {
34return result;
35}
36return 0;
37}
spring mvc requestmapping 能不能配置多个当然可以, 请看RequestMapping类的定义 :@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Mappingpublic @interface RequestMapping { String[] value() default {};它接收的value是字符串数组,也就是可以配置多个链接映射,例如:@RequestMapping({"/request1","/request2","/request3"})public String doSomeThing() {
SpringMVC启动的时候抛出异常throws ClassNotFoundException
别把异常抛出来,改用try catch把异常在方法内捕获 。
springmvc用@crossorigin解决跨域 ajax怎么写?在Spring框架4.2版本后 , Spring给出了注解的方式解决问题 。即在Controller控制器中,在Controller注解上方添加@CrossOrigin注解 。1. 最近别人需要调用我们系统的某一个功能,对方希望提供一个api让其能够更新数据 。由于该同学是客户端开发,于是有了类似以下代码 。2. @RequestMapping(method = RequestMethod.POST, value = https://www.zaoxu.com/jjsh/bkdq/"/update.json", produces = MediaType.APPLICATION_JSON_VALUE).3. public @ResponseBody Contacter update(@RequestBody Contacter contacterRO) {.4. logger.debug("get update request {}", contacterRO.toString());5. if (contacterRO.getUserId() == 123{contacterRO.setUserName("adminUpdate-wangdachui");}
读音以s结尾的单词,再加一个s复数怎么读?比如timepieces produces之类的读作【siz】.
produces more rice than any other country意思我知到,这句话怎么读?用汉语打出来普若丢赛斯 摸 瑞四 冉 爱乃 啊热 康确
radiosity怎么发音?是什么意思??re-di-'ositi
重音在o上,o发奥的音
制造用英语怎么读produce: vt. 生产, 提出, 出示, 产生, 制造 The factory produces 1,000 cars a week. 这家工厂每星期生产一千辆轿车 。Hard work produces success. 辛勤劳动带来成功 。Gas can be produced from coal. 煤气可用煤来制造 。Hard work often produces good results. 努力工作经常会有好结果 。n. 农产品 vi. 生产, 制造
produces 的过去分词是什么啊produced
英 [prə'dju:st]美 [prə'dju:st]
adj.(叶子等)畸形伸长的,引长的
v.产生;制作;生产( produce的过去式和过去分词 );创作
produce过去式和过去分词是啥咧翻译如下
produce
过去式 produced
过去分词 produced
produce词意为:
vt.& vi.产生;生产;制作;创作
vt.制造;出示;引起;[经济学]生利
n.产品;产量;产额;结果
例句
Scientists have produced powerful arguments against his ideas.
科学家们提出了有力论据反驳他的观点 。
过去分词是什么意思 , 请将详细一点用思维导图把动词的简单分类先明确 , 再通过思维导图把过去分词的用法详细列举出来 , 大家会明确动词过去分词出来在被动语态中应用,还可以做表语、定语、状语,这样把过去分词做以全面的掌握 。
英语过去分词是什么怎么用,用再哪里
文章插图
【produces】过去分词用法:1、过去分词作表语,相当于一个形容词,有“被动”含义 。We were so tired that we fell asleep soon. 我们太累 , 很快入睡了 。2、过去分词作定语 , 修饰谁,就和谁是被动关系 。cooked food被做熟了的食物 3、过去分词作状语,和主语是被动关系 。Seen from the top of the hill, the small city looks wonderful.从小山顶上看去,小城美仑美奂 。4、过去分词作宾补 , 作谁的补语,就和谁是被动关系 。The vicar has been asked to have the tree cut down.郊区牧师被要求把书砍掉 。拓展资料规则动词的过去分词的构成规则与规则动词的过去式的构成规则相同 。四点变化规则:1、一般动词,在词尾直接加“-ed ” 。2、以不发音的“e”结尾的动词 , 只在词尾加“d ” 。3、以“辅音字母 + y ”结尾的动词 , 将 "y" 变为 "i" ,再加“-ed” 。4、重读闭音节结尾 , 末尾只有一个辅音字母(r、y、x除外),先双写该辅音字母,再加“-ed” 。(资料来源:过去分词——百度百科)
- compacted
- 从今天开始 空调显示尘满是什么意思
- 新鲜猪肉常温下多久变质 猪肉在常温下能放多久
- 新鲜鸭蛋常温下能保存多久 鸭蛋在常温下的保质期是多久
- 危在旦夕的意思
- null什么意思
- 阿尔卑斯山在哪个国家
- 洗衣机在漂洗步骤停了
- 新鲜莴笋在常温下能放多久 新鲜莴笋在常温下可以放多久
- 苍蝇贴在手上怎么洗 苍蝇贴如何洗掉