Spring Boot – PathVariable truncado

Imagine que você declarou seu método todo bonitão e parecido com isso:


@GetMapping("{/person/{email}") public ResponseEntity getAny(@PathVariable("email") String email){
  //doStufs 

}

e ai na chamada do seu método rest, seja qual cliente você usa, você chama:


http://anything.com/person/somebody@test.com.br

 

Pra sua surpresa a variável email chegará no seu método +ou- assim: somebody@test.com
Repare que todo conteúdo após o segundo “.” foi truncado, suprimido pelo spring.

Isso ocorre devido ao spring MVC considerar tudo após o ultimo “.” como sendo extensão de um arquivo.
Para evitar este comportamento você pode fazer duas coisas:

  1. Desabilitar essa “funcionalidade” do SpringMvc:
  2. Aplicar uma regex bem simples em todos os paths onde podem ocorrer dos valores terem “.”

Seguem as duas soluções:


import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
       @Override
       public void configurePathMatch(PathMatchConfigurer configurer) {
            configurer.setUseSuffixPatternMatch(false);
      }
}

//Solução 2: aplica uma simples regex no path do método:

@GetMapping("{/person/{email:.+}")
public ResponseEntitygetAny(@PathVariable("email") String email){
//doStufs
}

Ambas as soluções, como esperado, resolvem o problema cabe a você validar no seu projeto qual delas faz mais sentido. Lembrando que emboras as duas resolvam o problemas elas possuem abordagens diferentes e consequências também.

 

 

 

Titanium Studio – Alloy Framework

Olá a todos!

Dando continuidade ao desenvolvimento de aplicações para plataforma mobile utilizando o Titanium Studio neste post vou tentar mostrar pouco das vantagens do uso do framework Alloy e como ele ajuda na organização do projeto.

Bom primeiramente você precisa entender que o Alloy nada mais é que um framework MVC, ou seja, ele tem como objetivo organizar seu projeto seguindo o design partner MVC (model-view-controller). Eu não pretendo adentrar na parte teórica do framework mas se alguém tiver interesse de entender ele por completo basta clicar aqui e você terá bastante informação sobre o Alloy #valeApena.

Bom mas porque falar do Alloy? como visto no post anterior Titanium Studio tutorial básico ao criar um projeto você terá a opção de usar o template Alloy ao invés do modelo clássico, mas o que muda ao escolher o Alloy e não o clássico?

Nada melhor pra responder essa pergunta do que fazendo na prática. Vamos criar nosso Hello World utilizando o template Alloy. Abra seu Titanium Studio vá em File->New->Mobile Project a seguinte tela deverá ser apresentada:

Screen Shot 2014-01-23 at 11.26.15 AM

Selecionado o Alloy a seguinte tela será exibida:

Screen Shot 2014-01-22 at 10.29.40 AM

Basta preencher, definir qual o SO e clicar em Finish

Screen Shot 2014-01-23 at 11.37.55 AM

Perceba agora como mudou a estrutura do projeto, com relação ao template clássico, note que a estrutura de pastas agora possui os seguintes diretórios:

  • assets
  • controllers
  • models
  • styles
  • views

Assets: neste diretório estarão os arquivos de recurso que por ventura seu projeto precise, a exemplo disso neste diretório estão as imagens de splash do app.

Controllers : esse é onde seu código core será armazenado, aqui é onde a lógica da sua aplicação será feita

Models : onde você terá o código que modela os objetos da sua aplicação

Views : aqui estarão os arquivos XML  que criarão a interface gráfica do seu app, utilizando alloy os componentes de interface gráfico podem, e devem, ser definidos nestes arquivos xml.

Styles : aqui está o código estilo da sua página, a sintaxe é baseada no css por tanto a maior parte das propriedades são as mesmas do css. Nesta pasta ficam arquivos com extensão tss e elas tem aplicação nos componentes do arquivo xml.

Tendo uma ideia de como funciona a estrutura, vamos agora rodar o projeto, botão direito no projeto-> Run As -> “escolha o emulador desejado”

Screen Shot 2014-01-23 at 11.59.31 AM

Esse deverá ser o resultado, agora vamos fazer algumas alterações para melhor compreensão de como funciona a estrutura. Primeiramente você abrirá o arquivo index.xml e substituirá o código existente pelo seguinte:


<Alloy>

<Window id="win">

<Label id="label" />

<TextField id="nameField" />

<Button id="buttonOk" onClick="doClick" />

</Window>

</Alloy>

Abra agora seu arquivo index.tss e substitua o código existente por:


"#win":{

backgroundColor : "black"

}

"#label":{

text : "Favor digitar seu nome:",

top:"200dp",

color : "white"

}

"#nameField":{

top:"230dp",

width : "200dp",

backgroundColor : "white"

}

"#buttonOk":{

title : "Ok",

top:"270dp",

backgroundColor : "white"

}

Index.js substitua o código por:

(SEM A TAG <pre> sou novo no wordpress n sei porque ele inseriu :D)

</pre>
function doClick(e) {

alert("Olá " +$.nameField.value+" seja bem vindo ao mundo mobile!");

}

$.win.open();
<pre>

Agora rode seu projeto normalmente e você deverá ter com resultado algo assim:

Screen Shot 2014-01-23 at 12.29.05 PM

Ao digitar seu nome e pressionar o o botão OK uma mensagem deverá ser apresentada.

Bom era isso o que eu gostaria de mostrar, a organização do projeto utilizando o Alloy framework e como ele ajuda na construção de grandes projetos. Com essa organização é possível reutilizar praticamente toda a lógica de negócio do seu app  em versões diferentes de SO, uma vez que a interface gráfica fica bem separada da camada de negócio.

Titanium Studio tutorial básico parte 1

Olé pessoal!
A pouco tempo eu conheci, e posso dizer que foi amor a primeira vista, o ambiente de desenvolvimento AppCelerator Titanium Studio. Até o meado de 2013 eu apenas tinha trabalhado com sistemas web, desktop e só um pouco de mobile, então surgiu uma oportunidade para eu trabalhar com desenvolvimento mobile e assim eu conheci esta ferramenta da qual vou tentar passar uma visão superficial e mostrar um pequeno exemplo de como é simples desenvolver usando seus recursos.
Bom pra começar deixa eu dar uma simples explicada no que é e porque seria interessante pensar em usar Titanium Studio. Hoje em dia com a febre de smartphones e tablets toda empresa quer oferecer aos seus clientes serviços consumidos através da plataforma mobile e isso gerou uma grande cobrança para com as equipes de desenvolvimento, para que se pudesse atender as necessidades de cada empresa, visto que toda empresa quer atender o maior número possível de clientes e isso implica em sistemas operacionais diferentes. Atualmente temos quatro grandes sistemas operacionais para mobile seriam eles Android, IOS, BlackBerry e Windows Phone e ai que aparece o pesadelo para equipes de desenvolvimento.
Imagine que cada SO possui sua linguagem de desenvolvimento, Android e BlackBerry usam Java enquanto que IOS objectv-c e Windows Phone usa C#, isso significa que para cada versão do seu app você terá que gerar um código em cada linguagem de cada SO para o qual você pretende lançar sua versão. Neste ponto que entra o Titanium, que é um ambiente de desenvolvimento mobile composto por uma IDE (Integrated Development Environment) denominada Titanium Studio, um SDK (Software Development Kit), um framework Alloy e um mundo de módulos de extensões.
O Titanium é um projeto Open source que prover a comunidade uma solução para desenvolvimento rápido e produtivo de aplicações para diferentes SO. Mas como que funciona, simples, no Titanium você desenvolve seu código utilizando a linguagem javascript e a partir deste código base ele irá realizar o deploy para a plataforma desejada seja ela Android, IOS, BlackBerry, Windows Phone (ainda em fase de testes) ou ainda HTML5.
Então vamos deixar de bla bla bla e vamos ao que interessa que é meter a mão na massa e desenvolver nosso primeiro app no Tintanium, e como não poderia de ser vamos fazer o famoso Hello World!

Vale lembrar que para desenvolver para IOS você precisará de um computador rodando Mac OS X.

Ok vamos começar então, a primeira coisa a fazer é baixar a ultima versão do titanium, para isso basta ir até a página: https://my.appcelerator.com/auth/signup você terá que realizar um pequeno cadastro, coisa simples, e então poderá fazer o download.

O Titanium Stutio é uma IDE baseada no eclipse, portanto basta dar um duplo clique no executável do Titanium que ele será carregado. Na primeira vez em que a IDE é iniciada aparecerá uma tela como esta
Screen Shot 2013-09-11 at 5.25.10 PM

questionando se você já possui conta no appCelerator, basta deixar a primeira opção marcada e clicar em next. A tela seguinte será exatamente solicitando seus dados de login senha, que você cadastrou para realizar o download, isso é bem interessante pois depois você poderá monitorar seus app’s através do site do appCelerator.

Screen Shot 2013-09-11 at 5.25.28 PM

após inserir seus dados, lembrando que isso será solicitado na primeira vez que voce acessa o Titaniu Studio, voce entrará na tela inicial do Titanium que como podem perceber, e não poderia ser diferente, é praticamente a mesma coisa do eclipse.

Screen Shot 2013-09-11 at 5.32.59 PM

Na tela inicial clicando na aba Get Started e seguindo para a sessão Configure Native SDKs você verá os SDK’s instalados, caso você esteja em um mac OS a opção IOS já estará disponível, para instalar uma SDK nova basta clicar na desejada e ao lado serão exibidas as informações sobe a SDK, caso você já a tenha instalada será exibida a opção de atualização do contrário será exibida a opção para configuração, caso queira instalar o SDK do android você terá que baixa-lo na página http://developer.android.com/sdk/index.html e então instala-lo após esse processo basta informar ao Titanium o local onde foi salvo o SDK.

O post ficou um pouco grande então resolvi dividi-lo em partes, vamos criar nosso famoso “hello world” no próximo post.

Titanium Studio tutorial básico parte 2

Seguindo com o tutorial básico do Titanium Studio vamos criar nosso primeiro app e como não poderia deixar de ser vamos criar o famoso “Hello World”.

Após abrir seu Titanium Studio vá em File -> New -> Mobile Project

a seguinte tela deverá aparecer:

Screen Shot 2014-01-22 at 10.29.08 AM

Perceba que no menu a esquerda você tem duas opções de templates: Alloy e Classic por agora iremos selecionar o template classico. Depois irei explicar o desenvolvimento com o template Alloy.

Clicando em next teremos a seguinte tela:

Screen Shot 2014-01-22 at 10.29.40 AM

Aqui será onde você deve determinar importantes configurações do seu projeto. Primeiro defina um nome para seu projeto, em meu caso helloWorld, depois defina o AppId, este obrigatoriamente deverá seguir o formato de domínio invertido, e por ultimo você deve checar quais SO seu app deverá ser gerado. Tendo preenchido estas informações basta clicar em finish e seu projeto será criado.

Screen Shot 2014-01-22 at 11.02.40 AM

Seu projeto deverá ser criado seguindo esta estrutura de pastas conforme a imagem acima. Você verá que o Titanium criará três pastas dentro da Resource são elas Android, Iphone e mobileweb, nestas pastas estão os arquivos de imagem e demais arquivos específicos para cada plataforma. Além destas pastas temos os dois principais arquivos o tiapp.xml e o app.js. O tiapp.xml contém as configurações do projeto, tenha muito cuidado ao realizar alterações neste arquivo pois se algo estiver errado seu projeto não irá funcionar. O app.js é o nosso app em si neste arquivo está o código javascript onde irá gerar nosso app. Os principais elementos a serem observados aqui são a criação da janela e da view estes são os dois principais elementos toda app tem ao menos uma janela e nesta você colocará todos os seus elementos, você poderá ou não ter uma view mas é altamente recomendado que se tenha uma view. Navegue até a linha 23, esta deve ser o atributo text do componente label, e substitua o  valor por “Hello World” 🙂 feito isso salve o arquivo, clique com o botão direito em cima do seu projeto vá em Run as e escolha o emulador desejado.

Screen Shot 2014-01-22 at 11.37.34 AMScreen Shot 2014-01-22 at 11.41.13 AM

Bom galera era isso que eu queria mostrar pra vocês a facilidade em se desenvolver um app mobile para SO completamente diferentes, esse é o principal objetivo do Titanium Studio. Existem outras ferramentas bem famosas como o PhoneGrap ambas tem o mesmo objetivo porém trabalham de formas diferentes, enquanto o Titanium oferece componentes nativos para seu app o phoneGrap gera uma web view para processamento de html, ambas as ferramentas são bastante poderosas e possuem suas vantagens e desvantagens. Em breve estarei colocando mais tutoriais aqui.

Como visto acima o Titanium permite que você desenvolva um único código e possa ser gerado o app em plataformas diferentes, embora ele permita essa não é uma prática encorajada, uma vez que cada SO possui seus padrões de interface gráfica e suas nuances, O titanium prover bibliotecas especificas para cada SO isso porque alguns componentes são específicos para um SO, exemplo a barra de navegação do IOS que não existe no Android. Por essas razões é aconselhado a se ter um projeto para cada Plataforma mas ai você vai me perguntar: mas a vantagem do Titanium não é gerar um código único e fazer o deploy em plataformas diferentes? posso responder esta pergunta com um + ou –  isso, a verdade é que o core do sistema em geral não precisará ser alterado, porém o que diz respeito a interface gráfica sim esta terá que se adequar aos padrões de cada SO. Com o uso do Framework Alloy você verá que poderá organizar seu projeto de forma a deixar bastante separa a parte de interface gráfica do core do app e isso é bastante útil na hora de desenvolver pois você não precisará rescrever o core do sistema para outra plataforma basta apenas o copy/past e adequar a interface gráfica para o novo SO. Aqui mesmo no blog em breve vai ter um post falando sobre o Alloy e a forma de organização dele e como ele é bastante útil.

 

Arquivo oculto no Mac OS

Para quem está com dificuldade em acessar arquivos e pasta ocultas no Mac OS, segue uma dica de como tornar visível todos os arquivos e pastas ocultas no SO.

abra o terminal e digite o seguinte comando:
defaults write com.apple.finder AppleShowAllFiles -bool true

para tornar os arquivos e pastas ocultas novamente, basta digitar o seguinte comando:
defaults write com.apple.finder AppleShowAllFiles -bool false

Após a execução do comando desejado, basta reiniciar o finder!

Existem alguns app’s que em um simples clique ele oculta ou exibe os arquivos, eu particularmente não gosto muito de sair instalando app pra tudo, mas pra quem preferir há também esta opção. neste link contem disponível um app pra download gratuito que cumpre esta função:
http://www.macupdate.com/app/mac/12194/invisibles

Serial Office 2011 Mac Os [Link Atualizado]

Galera essa vai pra quem baixou o office 2011 for mac e está precisando do serial, desde já deixo claro que sou totalmente contra a pirataria de software, mas caso alguém precise desbloquear o office ai vai uma pequena ajudinha…

basta baixar esse arquivo
https://mega.co.nz/#!dMEjUQ4L!
Chave para Download: PBkheivlfqxgYXCTdeFMECFNpJZc1kejFhIqyy3_vE8
e colocar ele dentro da pasta Library/Preferences
que o office magicamente estará liberado!!!!

Obs: a pasta Preferences poderá estar oculta, tem um post aqui no blog ensinando como visualizar e ocultar arquivos e pastas ocultas clique aqui para visualizar o post

Atenção essa chave serve para o office 2011 versão 14.1.0
foi lançada uma atualização que esta chave não funciona.
Caso alguém queira realizar o download da versão original trial 14.1.0
segue link para download:
http://www.superdownloads.com.br/download/36/microsoft-office-mac-2011/

Esse link do superDownloads foi uma dica do leitor
Pvh que eu acabei não vendo antes, pra quem estava com  dificuldades em achar e baixar a versão!

Ah e só uma dica que também percebi que ta gerando muita dúvida na cabeça da galera o Mac OS possui duas pastas library/Biblioteca uma na pasta do usuário e outra na raiz do HD vocês precisam acessar a pasta da RAIZ.

Eclipse Market

Bom dia a todos, acabo de formatar meu note e como sempre vem todo aquele trabalho de reinstalação de todos os programas que usamos em nosso dia a dia, pois bem, estava eu reinstalando tudo que preciso e entre muita besteira baixei o eclipse e então fui configurar todos os plugins para a IDE, foi ai que descobrir algo bastante interessante, para muitos pode até não ser uma novidade, mas confesso que pra mim foi uma grande e boa novidade, descobri que dentro do eclipse agora possui uma interface de market bem parecida com aquelas que já estamos acostumados para smartphones onde basta digitar o nome do plugin que se deseja instalar e ele busca as opções e então mostra um botão de install que ao pressionar ele mesmo já carrega tudo que é necessário e então basta um next, next install e tudo ta lá lindo e maravilhoso para ser utilizado, não que a forma de instalação anterior fosse arcaica e ou trabalhosa e difícil mas tenho que dizer só de não precisar ficar fuçando a net em busca da url correta para o plugin em questão já é uma mão na roda.

Abaixo segue alguns print’s que fiz para mostrar como ficou ainda mais facil instalar plugins no eclipse:

1) Caminho para o eclipse marketplace, note que a opção para instalação manual ainda está disponível.

2) tela de busca e instalação dos plugins, basta digitar o nome do plugin desejado no campo find e após encontra-lo pressionar o botão install.

Hello world!

Bem esse é o meu primeiro post no meu primeiro blog e eu não sabia muito bem sobre o que escrever, mas foi então que uma coisa me chamou atenção, logo que terminei de fazer o cadastro no wordPress o proprio sistema gerou uma primeira postage com o titulo Hello World, pra quem desenvolve sistemas sabe muito bem o que essa pequena frase significa… bom e assim eu decidi deixar pois nada melhor que um bom e velho Hello world! para iniciar algo que eu ainda não sei se vai dar certo!!!!!