How to POST form-url-encoded data with Spring Cloud Feign
Using spring-mvc annotations, how can I define an @FeignClient that can POST form-url-encoded?
spring-mvc spring-cloud spring-cloud-feign feign
add a comment |
Using spring-mvc annotations, how can I define an @FeignClient that can POST form-url-encoded?
spring-mvc spring-cloud spring-cloud-feign feign
add a comment |
Using spring-mvc annotations, how can I define an @FeignClient that can POST form-url-encoded?
spring-mvc spring-cloud spring-cloud-feign feign
Using spring-mvc annotations, how can I define an @FeignClient that can POST form-url-encoded?
spring-mvc spring-cloud spring-cloud-feign feign
spring-mvc spring-cloud spring-cloud-feign feign
edited Mar 4 '16 at 20:01
Newbie
asked Mar 4 '16 at 18:08
NewbieNewbie
3,24344368
3,24344368
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
Use form encoder for feign: https://github.com/OpenFeign/feign-form and your feign configuration can look like this:
class CoreFeignConfiguration {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters
@Bean
@Primary
@Scope(SCOPE_PROTOTYPE)
Encoder feignFormEncoder() {
new FormEncoder(new SpringEncoder(this.messageConverters))
}
}
Then, the client can be mapped like this:
@FeignClient(name = 'client', url = 'localhost:9080', path ='/rest', configuration = CoreFeignConfiguration)
interface CoreClient {
@RequestMapping(value = '/business', method = POST, consumes = MediaType.APPLICATION_FORM_URLENCODED)
@Headers('Content-Type: application/x-www-form-urlencoded')
void activate(Map<String, ?> formParams)
}
2
Take care of this lineMap<String, ?> formParams, the question mark is required.
– Max Peng
Sep 19 '17 at 5:05
For those who don't recognise groovy - this is in groovy thus not "return", ";" etc :)
– kazuar
Mar 20 '18 at 21:15
add a comment |
Full Java code with a simplified version of kazuar solution, works with Spring Boot:
import java.util.Map;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;
@FeignClient(name = "srv", url = "http://s.com", configuration = Client.Configuration.class)
public interface Client {
@PostMapping(value = "/form", consumes = APPLICATION_FORM_URLENCODED_VALUE)
void login(@RequestBody Map<String, ?> form);
class Configuration {
@Bean
Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) {
return new SpringFormEncoder(new SpringEncoder(converters));
}
}
}
Dependency:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
It might be unrelated but worth mentioning. If you are expecting a JSON response. You may want to configure the@BeanforDecoderreturn new GsonDecoder();
– Neeraj Singh
Feb 26 at 18:00
No, there is already Jackson decoder configured in spring boot.
– MariuszS
Feb 27 at 5:28
1
Yes, that is right. a default JSONDecoder is already configured. However, I had enabled gson as default converter and using a customized version@Bean Gson upbeatGson() { return new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();}- hence I mentioned. Otherwise, if the JSONDecoder - default version works, there is no need.
– Neeraj Singh
Mar 2 at 18:57
add a comment |
Please have a look at this issue. It looks that it contains a solution to your problem.
your answer doesn't explain how to post form parameters
– kazuar
Jul 4 '17 at 14:45
Add the time of writing (which was more than a year ago) there was not released version of FormEncoder and the only solution was described within linked issue
– Łukasz
Jul 5 '17 at 16:16
fair enough, if you update your answer I'll be able to revert the vote
– kazuar
Jul 5 '17 at 17:08
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f35803093%2fhow-to-post-form-url-encoded-data-with-spring-cloud-feign%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
Use form encoder for feign: https://github.com/OpenFeign/feign-form and your feign configuration can look like this:
class CoreFeignConfiguration {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters
@Bean
@Primary
@Scope(SCOPE_PROTOTYPE)
Encoder feignFormEncoder() {
new FormEncoder(new SpringEncoder(this.messageConverters))
}
}
Then, the client can be mapped like this:
@FeignClient(name = 'client', url = 'localhost:9080', path ='/rest', configuration = CoreFeignConfiguration)
interface CoreClient {
@RequestMapping(value = '/business', method = POST, consumes = MediaType.APPLICATION_FORM_URLENCODED)
@Headers('Content-Type: application/x-www-form-urlencoded')
void activate(Map<String, ?> formParams)
}
2
Take care of this lineMap<String, ?> formParams, the question mark is required.
– Max Peng
Sep 19 '17 at 5:05
For those who don't recognise groovy - this is in groovy thus not "return", ";" etc :)
– kazuar
Mar 20 '18 at 21:15
add a comment |
Use form encoder for feign: https://github.com/OpenFeign/feign-form and your feign configuration can look like this:
class CoreFeignConfiguration {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters
@Bean
@Primary
@Scope(SCOPE_PROTOTYPE)
Encoder feignFormEncoder() {
new FormEncoder(new SpringEncoder(this.messageConverters))
}
}
Then, the client can be mapped like this:
@FeignClient(name = 'client', url = 'localhost:9080', path ='/rest', configuration = CoreFeignConfiguration)
interface CoreClient {
@RequestMapping(value = '/business', method = POST, consumes = MediaType.APPLICATION_FORM_URLENCODED)
@Headers('Content-Type: application/x-www-form-urlencoded')
void activate(Map<String, ?> formParams)
}
2
Take care of this lineMap<String, ?> formParams, the question mark is required.
– Max Peng
Sep 19 '17 at 5:05
For those who don't recognise groovy - this is in groovy thus not "return", ";" etc :)
– kazuar
Mar 20 '18 at 21:15
add a comment |
Use form encoder for feign: https://github.com/OpenFeign/feign-form and your feign configuration can look like this:
class CoreFeignConfiguration {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters
@Bean
@Primary
@Scope(SCOPE_PROTOTYPE)
Encoder feignFormEncoder() {
new FormEncoder(new SpringEncoder(this.messageConverters))
}
}
Then, the client can be mapped like this:
@FeignClient(name = 'client', url = 'localhost:9080', path ='/rest', configuration = CoreFeignConfiguration)
interface CoreClient {
@RequestMapping(value = '/business', method = POST, consumes = MediaType.APPLICATION_FORM_URLENCODED)
@Headers('Content-Type: application/x-www-form-urlencoded')
void activate(Map<String, ?> formParams)
}
Use form encoder for feign: https://github.com/OpenFeign/feign-form and your feign configuration can look like this:
class CoreFeignConfiguration {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters
@Bean
@Primary
@Scope(SCOPE_PROTOTYPE)
Encoder feignFormEncoder() {
new FormEncoder(new SpringEncoder(this.messageConverters))
}
}
Then, the client can be mapped like this:
@FeignClient(name = 'client', url = 'localhost:9080', path ='/rest', configuration = CoreFeignConfiguration)
interface CoreClient {
@RequestMapping(value = '/business', method = POST, consumes = MediaType.APPLICATION_FORM_URLENCODED)
@Headers('Content-Type: application/x-www-form-urlencoded')
void activate(Map<String, ?> formParams)
}
edited Nov 16 '18 at 0:57
Javier C.
2,08721431
2,08721431
answered Jul 5 '17 at 10:57
kazuarkazuar
6461713
6461713
2
Take care of this lineMap<String, ?> formParams, the question mark is required.
– Max Peng
Sep 19 '17 at 5:05
For those who don't recognise groovy - this is in groovy thus not "return", ";" etc :)
– kazuar
Mar 20 '18 at 21:15
add a comment |
2
Take care of this lineMap<String, ?> formParams, the question mark is required.
– Max Peng
Sep 19 '17 at 5:05
For those who don't recognise groovy - this is in groovy thus not "return", ";" etc :)
– kazuar
Mar 20 '18 at 21:15
2
2
Take care of this line
Map<String, ?> formParams, the question mark is required.– Max Peng
Sep 19 '17 at 5:05
Take care of this line
Map<String, ?> formParams, the question mark is required.– Max Peng
Sep 19 '17 at 5:05
For those who don't recognise groovy - this is in groovy thus not "return", ";" etc :)
– kazuar
Mar 20 '18 at 21:15
For those who don't recognise groovy - this is in groovy thus not "return", ";" etc :)
– kazuar
Mar 20 '18 at 21:15
add a comment |
Full Java code with a simplified version of kazuar solution, works with Spring Boot:
import java.util.Map;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;
@FeignClient(name = "srv", url = "http://s.com", configuration = Client.Configuration.class)
public interface Client {
@PostMapping(value = "/form", consumes = APPLICATION_FORM_URLENCODED_VALUE)
void login(@RequestBody Map<String, ?> form);
class Configuration {
@Bean
Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) {
return new SpringFormEncoder(new SpringEncoder(converters));
}
}
}
Dependency:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
It might be unrelated but worth mentioning. If you are expecting a JSON response. You may want to configure the@BeanforDecoderreturn new GsonDecoder();
– Neeraj Singh
Feb 26 at 18:00
No, there is already Jackson decoder configured in spring boot.
– MariuszS
Feb 27 at 5:28
1
Yes, that is right. a default JSONDecoder is already configured. However, I had enabled gson as default converter and using a customized version@Bean Gson upbeatGson() { return new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();}- hence I mentioned. Otherwise, if the JSONDecoder - default version works, there is no need.
– Neeraj Singh
Mar 2 at 18:57
add a comment |
Full Java code with a simplified version of kazuar solution, works with Spring Boot:
import java.util.Map;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;
@FeignClient(name = "srv", url = "http://s.com", configuration = Client.Configuration.class)
public interface Client {
@PostMapping(value = "/form", consumes = APPLICATION_FORM_URLENCODED_VALUE)
void login(@RequestBody Map<String, ?> form);
class Configuration {
@Bean
Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) {
return new SpringFormEncoder(new SpringEncoder(converters));
}
}
}
Dependency:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
It might be unrelated but worth mentioning. If you are expecting a JSON response. You may want to configure the@BeanforDecoderreturn new GsonDecoder();
– Neeraj Singh
Feb 26 at 18:00
No, there is already Jackson decoder configured in spring boot.
– MariuszS
Feb 27 at 5:28
1
Yes, that is right. a default JSONDecoder is already configured. However, I had enabled gson as default converter and using a customized version@Bean Gson upbeatGson() { return new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();}- hence I mentioned. Otherwise, if the JSONDecoder - default version works, there is no need.
– Neeraj Singh
Mar 2 at 18:57
add a comment |
Full Java code with a simplified version of kazuar solution, works with Spring Boot:
import java.util.Map;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;
@FeignClient(name = "srv", url = "http://s.com", configuration = Client.Configuration.class)
public interface Client {
@PostMapping(value = "/form", consumes = APPLICATION_FORM_URLENCODED_VALUE)
void login(@RequestBody Map<String, ?> form);
class Configuration {
@Bean
Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) {
return new SpringFormEncoder(new SpringEncoder(converters));
}
}
}
Dependency:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Full Java code with a simplified version of kazuar solution, works with Spring Boot:
import java.util.Map;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE;
@FeignClient(name = "srv", url = "http://s.com", configuration = Client.Configuration.class)
public interface Client {
@PostMapping(value = "/form", consumes = APPLICATION_FORM_URLENCODED_VALUE)
void login(@RequestBody Map<String, ?> form);
class Configuration {
@Bean
Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) {
return new SpringFormEncoder(new SpringEncoder(converters));
}
}
}
Dependency:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
edited Feb 23 at 13:20
answered Feb 23 at 13:12
MariuszSMariuszS
20.9k1088124
20.9k1088124
It might be unrelated but worth mentioning. If you are expecting a JSON response. You may want to configure the@BeanforDecoderreturn new GsonDecoder();
– Neeraj Singh
Feb 26 at 18:00
No, there is already Jackson decoder configured in spring boot.
– MariuszS
Feb 27 at 5:28
1
Yes, that is right. a default JSONDecoder is already configured. However, I had enabled gson as default converter and using a customized version@Bean Gson upbeatGson() { return new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();}- hence I mentioned. Otherwise, if the JSONDecoder - default version works, there is no need.
– Neeraj Singh
Mar 2 at 18:57
add a comment |
It might be unrelated but worth mentioning. If you are expecting a JSON response. You may want to configure the@BeanforDecoderreturn new GsonDecoder();
– Neeraj Singh
Feb 26 at 18:00
No, there is already Jackson decoder configured in spring boot.
– MariuszS
Feb 27 at 5:28
1
Yes, that is right. a default JSONDecoder is already configured. However, I had enabled gson as default converter and using a customized version@Bean Gson upbeatGson() { return new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();}- hence I mentioned. Otherwise, if the JSONDecoder - default version works, there is no need.
– Neeraj Singh
Mar 2 at 18:57
It might be unrelated but worth mentioning. If you are expecting a JSON response. You may want to configure the
@Bean for Decoder return new GsonDecoder();– Neeraj Singh
Feb 26 at 18:00
It might be unrelated but worth mentioning. If you are expecting a JSON response. You may want to configure the
@Bean for Decoder return new GsonDecoder();– Neeraj Singh
Feb 26 at 18:00
No, there is already Jackson decoder configured in spring boot.
– MariuszS
Feb 27 at 5:28
No, there is already Jackson decoder configured in spring boot.
– MariuszS
Feb 27 at 5:28
1
1
Yes, that is right. a default JSONDecoder is already configured. However, I had enabled gson as default converter and using a customized version
@Bean Gson upbeatGson() { return new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();} - hence I mentioned. Otherwise, if the JSONDecoder - default version works, there is no need.– Neeraj Singh
Mar 2 at 18:57
Yes, that is right. a default JSONDecoder is already configured. However, I had enabled gson as default converter and using a customized version
@Bean Gson upbeatGson() { return new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();} - hence I mentioned. Otherwise, if the JSONDecoder - default version works, there is no need.– Neeraj Singh
Mar 2 at 18:57
add a comment |
Please have a look at this issue. It looks that it contains a solution to your problem.
your answer doesn't explain how to post form parameters
– kazuar
Jul 4 '17 at 14:45
Add the time of writing (which was more than a year ago) there was not released version of FormEncoder and the only solution was described within linked issue
– Łukasz
Jul 5 '17 at 16:16
fair enough, if you update your answer I'll be able to revert the vote
– kazuar
Jul 5 '17 at 17:08
add a comment |
Please have a look at this issue. It looks that it contains a solution to your problem.
your answer doesn't explain how to post form parameters
– kazuar
Jul 4 '17 at 14:45
Add the time of writing (which was more than a year ago) there was not released version of FormEncoder and the only solution was described within linked issue
– Łukasz
Jul 5 '17 at 16:16
fair enough, if you update your answer I'll be able to revert the vote
– kazuar
Jul 5 '17 at 17:08
add a comment |
Please have a look at this issue. It looks that it contains a solution to your problem.
Please have a look at this issue. It looks that it contains a solution to your problem.
answered Mar 30 '16 at 21:32
ŁukaszŁukasz
1496
1496
your answer doesn't explain how to post form parameters
– kazuar
Jul 4 '17 at 14:45
Add the time of writing (which was more than a year ago) there was not released version of FormEncoder and the only solution was described within linked issue
– Łukasz
Jul 5 '17 at 16:16
fair enough, if you update your answer I'll be able to revert the vote
– kazuar
Jul 5 '17 at 17:08
add a comment |
your answer doesn't explain how to post form parameters
– kazuar
Jul 4 '17 at 14:45
Add the time of writing (which was more than a year ago) there was not released version of FormEncoder and the only solution was described within linked issue
– Łukasz
Jul 5 '17 at 16:16
fair enough, if you update your answer I'll be able to revert the vote
– kazuar
Jul 5 '17 at 17:08
your answer doesn't explain how to post form parameters
– kazuar
Jul 4 '17 at 14:45
your answer doesn't explain how to post form parameters
– kazuar
Jul 4 '17 at 14:45
Add the time of writing (which was more than a year ago) there was not released version of FormEncoder and the only solution was described within linked issue
– Łukasz
Jul 5 '17 at 16:16
Add the time of writing (which was more than a year ago) there was not released version of FormEncoder and the only solution was described within linked issue
– Łukasz
Jul 5 '17 at 16:16
fair enough, if you update your answer I'll be able to revert the vote
– kazuar
Jul 5 '17 at 17:08
fair enough, if you update your answer I'll be able to revert the vote
– kazuar
Jul 5 '17 at 17:08
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f35803093%2fhow-to-post-form-url-encoded-data-with-spring-cloud-feign%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown